这是关于 C++ 的一个非常基本的问题。为什么不为语句“A x(A())”调用构造函数?
在下面的代码中——我使用 g++ 4.8.2 运行——构造函数(以及析构函数)只被调用一次。x
这可能是由于优化,但我对typeid 报告的类型感到好奇,即“A(A (*)())”。
#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
using namespace std;
class A{
public:
~A() { cout << "Destructed" << endl; }
};
int main() {
int status;
A x(A());
cout << abi::__cxa_demangle(typeid(x).name(),0,0,&status) << endl;
A a ;
cout << abi::__cxa_demangle(typeid(a).name(),0,0,&status) << endl;
return 0;
}