いくつかの質問に答えた後、私は今日この実験を構築しました
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の初期化の前に一時が破棄された場合は、を出力します。それ以外の場合はを出力します。bfalsetrue
仕様によると、一時は完全な式の最後に破棄されます。これは、の初期化では順序付けられていないようですb。だから私は疑問に思う
- 仕様では、実装が異なる実行の両方
falseで印刷することを許可していますか?true
Clangfalseは上記を印刷し、GCCはを印刷しtrueます。これは私を混乱させます。順序を定義する仕様テキストを見逃しましたか?
