Это очень простой вопрос о 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;
}
A x(A{});
илиA x{A()};
илиA x{A{}};
илиA x((A()));
- person Piotr Skotnicki   schedule 06.09.2015