今朝私がBOOST_STATIC_ASSERT
を使用して間違ったタイプの参照を作成していないことを確認するためにテンプレートコードを作成していました。C++はどのようにconst doubleを処理しますか?&はintを参照していますか?
#include <iostream>
int main()
{
int x = 5;
const double& y = x;
std::cout << y << std::endl;
return 0;
}
:私は、私はあなたがconstのダブル&がintに言及作るしようとしたときにも文句を言わないのgccを発見するためにショックを受けた代替コンパイラエラーを見てみることを静的アサートを削除しようとしたがときコンパイルしても警告しません:
$ g++ ~/stuff/badRef.cpp -Wall -Wextra -pedantic
$ a.out
5
ここでは何が起こっていますか?これは未定義の動作ですか?もしそうなら、なぜgccは文句を言わないのですか?私のマシンでは、intは4バイト、doubleは8です。つまり、doubleを印刷すると、そのアドレスの8バイトをdoubleと解釈して出力するはずですが、実際にはその位置に4バイトのintがあります。
非常に混乱しています。助けて!
GCCのどのバージョンですか? –
バージョン4.3.3です。 – voltrevo
'const double&y = x;'の後に 'x = 42;'を追加するとどうなりますか?一見すると不思議に思われるかもしれません。 – moala