私はC++標準のODRに関する関連条項を読み直しましたが、この質問はまだ私には開いています。標準では、インライン関数の定義は、それが使用されているすべての翻訳単位に現れなければならず、定義はほぼページに記述されている意味で同一でなければならない。トークンの順序は同じでなければならないと言います。ローカル識別子の名前が含まれていますか?1つの定義ルール:対応するエンティティが異なる名前を持つことはできますか?
つまり、次のプログラムはODRに違反していますか?(私はVisual Studio 2008でそれを自分自身でテストしようとしましたが、0のエラーと0の警告がありましたが、私はこの例を2つの全く異なる定義に変更しても0のエラーと0の警告MSVCの言い訳では、ODR違反のために正式に診断は必要ないことに注意してください)。
//main.cpp
inline int f(int);
int main(){
f(3);
}
int f(int x){
int z = x;
return z*z;
}
//other.cpp
inline int f(int xx){
int zz = xx;
return zz*zz;
}
@fred:Cにはインライン関数とODRもありますか? –
それはありますか?気軽にロールバックしてください。インライン関数はC++のみでした。 – fredoverflow
是非、私は盲目的に答えを信じることはできません。あなたが何らかの答えに同意するなら、それをupvoteしてください:) –