在回答了一些问题后,我今天构建了这个实验
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
上面的Clang 打印false
,而 GCC 打印true
. 这让我很困惑。我是否错过了一些定义订单的规范文本?