作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
给定以下代码:
#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/
我是一名优秀的程序员,十分优秀!