2010-08-01 1 views

답변

1

컴파일러는 예기치 않은 (공식적으로) 예측할 수없는 인라이닝 결정의 주입니다. 훌륭한 컴파일러는 문서에서 구현 동작에 대한 지침을 제공합니다. 코드가 복잡할수록 인라인 될 가능성은 낮아지고, 위키 피 디아에서 인라인되지 않는 것의 예를 찾을 수 있습니다.

"많은 작업이 필요합니다"라는 말은 의도 한 연산자가 대부분의 컴파일러가 인라인하기에는 너무 복잡하다는 뜻입니다.

Microsoft의 Visual C++ 컴파일러는 인라인으로 표시되지 않은 함수를 인라인하기로 결정한 경우와 인라인으로 표시된 함수를 인라인하지 않을 때 경고를 생성하도록 만들 수 있습니다. 나는 그것이 일 수있는 느낌을 얻기를 위해 그것을 좋아한다 인라인.

1

아니요, 아닙니다. 컴파일러는 함수를 인라인하는 모든 요청과 모든 요청을 완전히 무시할 수 있습니다. 무시할 수없는 것은 내부 연결을 제공해야하기 때문에 내부 연결을 포함하는 헤더가 여러 번역 단위에 포함될 수 있다는 것입니다.

+3

인라인 함수에 내부 링크가 있어야한다는 것은 맞지 않습니다. 기본적으로'inline' 함수는 내부 연결을 얻지 못합니다. 그들은 ODR로부터 예외를받습니다. 프로그램은 사용되는 모든 TU에서 이들을 정의해야하지만, 여전히 동일한 기능입니다 (예 : 주소, 인라인 함수의 정적 데이터 항목 주소는 항상 같아야합니다 값). –

2

연산자는 다른 함수와 마찬가지로 정상적인 함수입니다.

+1

그러나 클래스에 정의 된 본문이있는 연산자 (또는 다른 함수)는 컴파일러가 무시할 수있는 함수가 인라인된다는 명시 적 요청입니다. –

+0

@ Neeil : 귀하의 요점은 무엇인지 모르겠습니다. "... 다른 기능과 마찬가지로"멋지게 커버했습니다. – sbi

+0

@sbi 대답은 인라인을 언급하지 않습니다. –