구식 C 및 C ++에서, 가능한 최적화에 대한 컴파일러에 대한 제안 (제안 이상의 것) inline
은 다음과 register
같습니다.
현대 C ++ inline
에서 링커는 선언이 아닌 여러 정의가 다른 번역 단위에서 발견되면 모두 동일하며 링커는 자유롭게 하나를 유지하고 다른 하나는 모두 버릴 수 있습니다.
inline
헤더 파일에 함수 (복잡하거나 "선형")가 정의되어 있으면 링커에서 "다중 정의"오류를 발생시키지 않고 여러 소스에 해당 함수를 포함시킬 수 있어야합니다.
클래스 함수 내에 정의 된 멤버 함수는 기본적으로 템플릿 함수 (글로벌 함수와 달리) 인 "인라인"입니다.
//fileA.h
inline void afunc()
{ std::cout << "this is afunc" << std::endl; }
//file1.cpp
#include "fileA.h"
void acall()
{ afunc(); }
//main.cpp
#include "fileA.h"
void acall();
int main()
{
afunc();
acall();
}
//output
this is afunc
this is afunc
fileA.h를 두 개의 .cpp 파일에 포함 시키면 두 개의 인스턴스가 생성됩니다 afunc()
. 링커는 그 중 하나를 버립니다. inline
지정 하지 않으면 링커가 불평합니다.