c++ - `A a = A()` 有效吗?下面调用了哪些运算符/方法?

标签 c++ c++11 constructor language-lawyer copy-constructor

给定以下代码:

#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;
}

以上代码在 Ubuntu 14.04 上符合 g++ 4.8.4:

g++ -g -o test test.cpp

并输出:

ctor

A a = A(); 是否符合 C++ 标准?或者这只是 UB 因此依赖于编译器?如果该代码符合标准,那么在下面调用了哪些方法? A() 应该什么都不返回,不是吗?

最佳答案

A() 执行 value initialization ,它创建了一个无名的临时对象。

A a = A();copy initialization , a 从上面的临时文件中初始化。从输出可以看出,这里直接使用了A的默认构造函数来初始化a,因为copy elision .

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

相关文章:

c# - 如何在向父类构造函数传递参数时向子类构造函数添加更多代码?

C++ 返回临时对象困惑

c++ - 如何在 GCC 中禁用/启用预取?

c++ - std::unordered_map 是如何实现的

c++ - 为什么具有固定底层 char 类型的枚举的值解析为 fct(int) 而不是 fct(char)?

c++ - 为什么 is_lock_free 是一个成员函数?

c++ - 我的代码如何知道它寻址的是哪个 .dll?

c++ - 为什么我的 ".find"函数给我错误的值?

java - 不可变变量的延迟初始化

java - 程序的两个部分中从未达到 If 和 Else 语句