C++인라인 함수


소개

inline 지정자로 정의 된 함수는 인라인 함수입니다. 인라인 함수는 One Definition Rule 을 위반하지 않고 여러 번 정의 될 수 있으므로 외부 링크가있는 헤더에 정의 할 수 있습니다. 컴파일러에 대한 함수 인라인 힌트를 선언하면 코드 생성 중에 함수가 인라인되어야하지만 보증은 제공되지 않습니다.

통사론

  • inline 함수 inline
  • inline 함수 정의
  • 클래스 {function_definition};

비고

보통 함수에 대해 생성 된 코드가 충분히 작 으면 인라인 될 좋은 후보입니다. 왜 그렇게? 함수가 크고 루프에서 인라인 된 경우 모든 호출에 대해 큰 함수의 코드가 복제되어 생성 된 바이너리 크기가 부풀어 오르게됩니다. 그러나 얼마나 작은 것이 충분합니까?

인라인 함수는 오버 헤드 호출 기능을 피하기 위해 좋은 방법이 될 것 같다 있지만, 그것은 표시된 모든 기능을하지 않도록 유의해야한다의 inline 인라인된다. 즉, inline 이라고하면 명령이 아니라 컴파일러의 힌트 일뿐입니다. 컴파일러는 함수를 인라인 할 의무가 없으며 무시할 수 있습니다. 대부분 컴파일러가 무시합니다. 현대 컴파일러는 컴파일러가이 함수의 인라이닝 제안을 심각하게 받아 들였을 때,이 키워드가 과거의 흔적이라는 최적화를하는 것이 좋습니다. inline 으로 표시되지 않은 함수조차도 컴파일러가 이점을 얻을 때 인라인됩니다.

연계 지시어로 인라인

현대 C ++에서 inline 을 더 실용적으로 사용하면 연결 지시어로 사용하게됩니다. 선언하지 않고 여러 소스에 포함될 헤더의 함수를 정의 할 때 각 번역 단위에는 ODR (One Definition Rule) 위반을 초래 하는이 함수의 자체 복사본이 있습니다. 이 규칙은 대략 하나의 함수, 변수 등의 정의 만있을 수 있다고 말합니다.이 위반을 피하기 위해 함수 정의를 inline 표시하면 암시 적으로 함수가 내부적으로 연결됩니다.

FAQs

C ++에서 함수 / 메소드에 대한 'inline'키워드는 언제 작성해야합니까?

함수가 헤더에 정의되기를 원할 때만. 함수의 정의가 여러 컴파일 단위에 나타날 수있는 경우에만 더욱 정확하게. 컴파일러가 코드를 최적화하는 동안 컴파일러에게 더 많은 정보를 제공하기 때문에 헤더 파일에 작은 (하나의 라이너에서와 같이) 함수를 정의하는 것이 좋습니다. 컴파일 시간도 증가합니다.

C ++에서 함수 / 메소드에 대한 키워드 'inline'을 작성하지 않아야합니까?

컴파일러가 인라인하면 코드가 더 빨리 실행될 것이라고 생각할 때 inline 추가하지 마십시오.

컴파일러는 언제 함수 / 메소드를 인라인으로 만들지 모를 것입니까?

일반적으로, 컴파일러는 당신보다 더 잘할 수 있습니다. 그러나 컴파일러에는 함수 정의가없는 경우 코드를 인라인하는 옵션이 없습니다. 최대한 최적화 된 코드에서는 대개 모든 개인 메소드가 요청되었는지 여부에 관계없이 인라인됩니다.

참고 사항

인라인 함수 관련 예