構造体内の匿名構造体のブレースまたはイコールイニシャライザは、VS2013によって生成された出力では動作しません。コードがあります:Linux上でこのコマンドを使用して、匿名構造体のブレスイニシャライザがVS2013で動作しない
#include <iostream>
#include <cstdint>
struct S
{
struct
{
uint64_t val = 0;
}anon;
};
int main()
{
S s;
S *a = new S;
std::cout << s.anon.val << std::endl;
std::cout << a->anon.val << std::endl;
return 0;
}
コンパイル:
g++ -std=c++11 def-init-anon-atruct.cpp -o def-init-anon-atruct
(最適化フラグを追加すると、結果には影響しません)
期待される結果:
0
0
奇妙な。 VS2013でそれを実行すると、ガベージ値が得られます。 C++ 11の標準を実装するという点で、誰がこの問題に直面していますか?私はこれがGCCの過ちであると大いに疑う。
何か役に立たないVSコンパイラオプションとは関係がありますか? Windowsの拡張機能ですか?私はバグMSのために構造体のためのデフォルトのコンストラクタを作る必要がありますか?これは不合理です。
http://stackoverflow.com/questions/1069621/are-members-of-a-c-struct-initialized-to-0-by-default – Ben
私はこれがgccの過ちであることを非常に疑っています。 –
インテルのコンパイラは、Microsoftのターゲットプラットフォームで言語の適合性が向上しています。 – Potatoswatter