いくつかの質問に答えた後、私は今日この実験を構築しました
struct A {
bool &b;
A(bool &b):b(b) { }
~A() { std::cout << b; }
bool yield() { return true; }
};
bool b = A(b).yield();
int main() { }
b
動的初期化によってfalse
設定する前に(ゼロ初期化の結果として)値があります。終了true
の初期化の前に一時が破棄された場合は、を出力します。それ以外の場合はを出力します。b
false
true
仕様によると、一時は完全な式の最後に破棄されます。これは、の初期化では順序付けられていないようですb
。だから私は疑問に思う
- 仕様では、実装が異なる実行の両方
false
で印刷することを許可していますか?true
Clangfalse
は上記を印刷し、GCCはを印刷しtrue
ます。これは私を混乱させます。順序を定義する仕様テキストを見逃しましたか?