2008-11-05 5 views
10

나는 종종 간단한 메소드가 구현 파일에서 별도로가 아니라 헤더 파일의 클래스 본문에 정의되는 C++에서 대형 비 템플릿 클래스를 실행합니다. 예 :C++ 메소드가 클래스 내부에서 정의되는 경우가있는 이유는 무엇입니까?

class Foo { 
    int getBar() const { return bar; } 
    ... 
}; 

왜 이렇게할까요? 단점이있는 것 같습니다. 클래스의 헤더 파일이 많은 다른 장소에 포함되어 있으면 컴파일러가 부담을 느끼게됩니다.

내 생각에 사람들은이 기능을 다른 모듈에 인라인 할 의도가있어서 성능을 크게 향상시킬 수 있다고 생각합니다. 그러나 최신 컴파일러가 모듈 간 링크 타임에 인라인 (및 기타 프로 시저 간 최적화)을 수행 할 수 있다고 들었습니다. 이러한 종류의 링크 시간 최적화에 대한 지원은 얼마나 광범위합니까? 실제로 이런 종류의 정의가 불필요합니다. 이 정의에 대한 다른 좋은 이유가 있습니까?

답변

14

C++ 표준에 따르면 클래스 정의 내에 정의 된 메서드는 기본적으로 inline입니다. 결과적으로 getter 및 setter와 같은 단순한 함수의 성능이 향상됩니다. 일부 컴파일러가이를 수행 할 수는 있지만 링크 타임 교차 모듈 최적화는 더욱 어렵습니다.

+1

그렇습니다. 그러나 "기본적으로 인라인"은 컴파일러가 인라인 할 것이라는 의미는 아니며 "인라인"키워드가 실제로 실제로 * 힌트 *를 추가하지 않아도된다는 것을 의미합니다. –

2

당신은 당신 자신의 질문에 대답했습니다. 그들은 실제로 인라인 방법입니다.

사용하는 이유는 성능입니다.

+0

여전히 컴파일러가 인라인 할 것이라는 의미는 아니며 "인라인"키워드가 실제로 실제로 사용된다는 힌트 *를 수동으로 추가하지 않아도된다는 것을 의미합니다. –

7

자주 사용하는 것이 더 쉽고 시간을 절약 할 수 있습니다. 또한 헤더 파일에서 동일한 수의 행을 사용하면서 구현 파일에 약간의 혼란을 저장합니다. 그리고 getter와 setter와 같은 것에 국한된다면 읽기가 쉽지 않습니다.

+0

간단한 코드로 소스 파일을 어지럽게 정리할 필요가 없습니다. –

관련 문제