有人可以解释为什么bar
行为foo
与下面的代码示例不同?
#includeusing 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
James McNell.. 7
所有变量都有名称.
在bar()
,A{}
不声明变量. A{}
是构造临时A
对象的表达式.像所有暂时没有被延长的临时A
对象一样,这个对象在构造它的完整表达式的评估结束时被破坏(非正式地,这意味着"在;
").
所有变量都有名称.
在bar()
,A{}
不声明变量. A{}
是构造临时A
对象的表达式.像所有暂时没有被延长的临时A
对象一样,这个对象在构造它的完整表达式的评估结束时被破坏(非正式地,这意味着"在;
").