Это очень простой вопрос о C++. Почему конструктор не вызывается для выражения «A x (A())»?Почему конструктор A не вызывается для выражения «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;
}
Используйте 'A x (A {});' или 'A x {A()};' или 'A x {A {}};' или 'A x ((A()));' –
@ πάνταῥεῖ что * копия *? –