인라인 함수 예제

정적 인라인은 모든 C 방언과 C ++에서 동일한 효과를 가합니다. 필요한 경우 로컬로 표시되는(의 줄 바임 복사) 함수를 방출합니다. 컴파일 시간 오류로 이어질 수 있다고 생각해야 하지만 이 경우 클래스의 인라인 함수가 클래스 선언의 닫기 중괄호까지 평가되지 않으므로 작동합니다. 이것은 종종 클래스 본문 외부에서 인라인 함수를 정의하는 대안보다 더 편리합니다. 그러나 클래스를 작성하는 사람이 더 쉽지만 클래스가 수행하는 방법(외부 동작)과 클래스가 수행하는 방법(구현)을 혼합하기 때문에 모든 판독기에서는 더 어렵습니다. 이 혼합물 때문에 클래스를 고도로 재사용하려는 경우 클래스 본문 외부의 모든 멤버 함수를 정의해야 하며 클래스의 설명서가 헤더 파일 자체인 경우 이를 정의해야 합니다. 이것은 Spock의 논리의 또 다른 응용 프로그램입니다 : 많은 (모든 사람들이 클래스를 재사용하는) 요구는 소수의 요구 (클래스의 구현을 유지하는 사람들) 또는 클래스의 원래 저자보다 큽니다. 다음은 클래스 본문 외부에 정의된 인라인 멤버 함수의 예입니다. C++ 컴파일러는 인라인 함수의 인수 형식을 확인하고 필요한 변환이 올바르게 수행됩니다. 전처리기 매크로는 이 작업을 수행할 수 없습니다. 또 다른 한 가지는 매크로가 전처리업체에 의해 관리되고 인라인 함수는 C++ 컴파일러에 의해 관리된다는 것입니다.

직선 C에서는 보이드*를 구조체에 배치하여 “캡슐화된 구조체”를 달성할 수 있으며, 이 경우 void*는 구조체 의 사용자에게 알려지지 않은 실제 데이터를 가리킵니다. 따라서 구조체 의 사용자는 void*가 가리키는 것을 해석하는 방법을 모르지만 액세스 함수는 void*를 적절한 숨겨진 유형으로 캐스팅합니다. 이것은 캡슐화의 형태를 제공합니다. 불행하게도 그것은 형식 안전을 상실하고, 또한 구조체의 사소한 필드에 대한 심지어 사소한 필드에 액세스 할 수있는 함수 호출을 부과 (당신은 구조체의 필드에 직접 액세스를 허용하는 경우, 모든 사람이 필요에 따라 할 필요가 있기 때문에 직접 액세스를 얻을 수있을 것입니다 보이드*가 가리키는 것들을 해석합니다.; 이렇게 하면 기본 데이터 구조를 변경하기가 어려워지습니다. 마지막으로 인라인 함수는 C++의 중요한 기능이라는 점에 유의해야 합니다. 인라인 함수를 적절히 사용하면 성능이 향상될 수 있지만 인라인 함수를 임의로 사용하면 더 나은 결과를 제공할 수 없습니다.