有人可以解释为什么 bar
的行为与以下代码示例中的 foo
不同吗?
#include <iostream>
using namespace std;
struct A {
A() { cout << "A"; }
~A() { cout << "B"; }
};
void foo() {
A a{};
cout << "X";
}
void bar() {
A {};
cout << "X";
}
int main() {
foo();
cout << endl;
bar();
cout << endl;
}
输出(gcc 4.8.1,Ubuntu 13.10,使用 --std=c++11
编译):
AXB
ABX
最佳答案
所有变量都有名字。
在 bar()
中,A{}
没有声明变量。 A{}
是构造临时 A
对象的表达式。与所有生命周期未被延长的临时对象一样,此 A
对象在构造它的完整表达式求值结束时被销毁(非正式地,这意味着“在 ;
").
关于c++ - 没有名字的变量的销毁顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388579/