2017-04-15 9 views
0

C++ヘッダファイルで次の関数を定義し、それを異なる.ccファイルに含めることができます。 私は、コンパイラが常に同じstrアドレスに頼っているのか、それとも異なっているのか、それとも未定義の振る舞いなのでしょうか?inline Constexpr異なるヘッダ内のconst char *関数

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

コンパイル単位でインライン変数のアドレスが変更されます。代わりに静的変数を作成することを検討してください。 –

答えて

0

ここで魔法はありません。インラインはインラインです。 constexprは状況を変えません。

つまり、インライン関数は、本体を手で貼り付けるのと同じです。したがって、そのアドレスは同じであることが保証されていません。しかし、ほとんどのコンパイラはスペースを節約するために1つのアドレスに最適化します(ただし、最適化自体は可能です)。

スタティックアドレスが本当に必要な場合は、スタティック/グローバルにして、それを専用のソースユニットに入れる必要があります。ヘッダーには安定したアドレスがない可能性があります。

関連する問題