私はこのコードを持っています:
#include <iostream>
using std::cout;
using std::endl;
struct Int {
const int& val;
};
Int test(){
return Int {30};
}
int main()
{
Int i = Int{30};
cout << i.val << endl;
Int j = test();
cout << j.val << endl;
return 0;
}
でコンパイルすると、次の-std=c++11 -O2
ように出力されます。
30
0
そして警告:
main.cpp: In function 'int main()':
main.cpp:18:15: warning: '<anonymous>' is used uninitialized in this function [-Wuninitialized]
cout << j.val << endl;
i.val
ダングリングリファレンスですか?私が理解している限り、Int{30}
一時的なものはセミコロンで破棄され、すでに破棄されているi.val
一時的なものにバインドされます。val
それが正しいか?
そして、なぜコンパイラj
は初期化されておらず、j.val
0 であると言うのですか?