С учетом следующего кода:
#include <iostream>
class A {
public:
int x;
public:
A() : x(0) { std::cout << "ctor" << std::endl; }
A(const A& o) : x(o.x) { std::cout << "copy ctor" << std::endl; }
A& operator=(const A& o) { x = o.x; std::cout << "copy asgnmt" << std::endl; return *this; }
};
int main() {
A a = A();
return 0;
}
Приведенный выше код выполняется с g++ 4.8.4
на Ubuntu 14.04
:
g++ -g -o test test.cpp
И вывод:
ctor
Соответствует ли A a = A();
стандарту (ам) C ++? Или это просто UB, поэтому зависит от компилятора? Если этот код соответствует стандарту, то какие методы вызываются ниже? A()
вообще ничего не должно возвращать, не так ли?