2017-04-15 35 views
0

我可以在C++頭文件中定義以下函數,然後將其包含在不同的.cc文件中。 我不知道編譯器是否總是訴諸同一個str地址,或者它可能不同,或者它是未定義的行爲?在不同的頭文件中內聯Constexpr const char *函數

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

對於編譯單元,內聯變量的地址將發生變化。考慮創建一個靜態變量。 –

回答

0

這裏沒有魔法,內聯是內聯。 constexpr不會改變這種情況。

總之,內聯函數與手工複製粘貼身體是一樣的。因此,其地址不能保證相同。不過,大多數編譯器會優化到一個地址以節省空間(允許優化本身)。

如果您確實需要靜態地址,您必須將其設置爲靜態/全局,並將其放置在專用源單元中。標題中的內容不太可能具有穩定的地址。

相關問題