2017-04-15 6 views
0

C++ 헤더 파일에서 다음 함수를 정의한 다음 다른 .cc 파일에 포함 할 수 있습니다. 컴파일러가 항상 동일한 str 주소에 의존하는지, 아니면 다를 수 있는지, 또는 정의되지 않은 동작입니까?인라인 Constexpr 다른 헤더의 const char * 함수

inline constexpr const char *GetCompilerOptions() { 
    return "" 
    #ifdef __AVX__ 
     "AVX," 
    #endif // __AVX__ 
    ; 
} 
+0

인라인 된 변수의 주소가 컴파일 단위로 변경됩니다. 정적 변수를 만드는 것이 좋습니다. –

답변

0

여기에는 마법이 없습니다. 인라인은 인라인입니다. constexpr은 상황을 변경하지 않습니다.

즉, 인라인 함수는 본문을 손으로 붙여 넣는 복사와 동일합니다. 따라서 그 주소가 동일하게 보장되지는 않습니다. 대부분의 컴파일러는 하나의 주소로 최적화하여 공간을 절약합니다 (최적화 자체는 허용됩니다).

정적 주소가 실제로 필요한 경우 고정/전역 주소로 설정하고 전용 원본 장치에 저장해야합니다. 헤더에있는 것들은 안정된 주소를 가지지 않습니다.