给出以下代码:

#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 initializationa是从上述临时文件初始化的。从输出中可以看到,由于copy elision,缺省的A构造函数用于直接初始化a

关于c++ - `A a = A()`有效吗?在下面调用什么运算符/方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55756338/

10-09 05:57