给出以下代码:
#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()
应该什么都不返回,不是吗? 最佳答案
A()
执行value initialization,它创建一个无名的临时对象。A a = A();
是copy initialization,a
是从上述临时文件初始化的。从输出中可以看到,由于copy elision,缺省的A
构造函数用于直接初始化a
。
关于c++ - `A a = A()`有效吗?在下面调用什么运算符/方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55756338/