这个问题已经在这里有了答案:
已关闭8年。
class A {};
int main() {
A a(a);
}
这样编译。
我没有收到任何警告。
为什么这似乎是有效的C++?
在标准的任何地方都提到了这一点吗?
是否有警告标志可以报告此gcc?
当类具有成员数据时,数据将随机结束。
例子:
#include <iostream>
class A {
public:
int i;
A() : i{6} {}
};
int main() {
A a(a);
std::cout << a.i << '\n';
}
这里发生了什么?
另外,如何防止自己意外地这样做呢? -是否可能使其成为编译器错误?
最佳答案
这也适用于用户定义的类型,例如class A
。所使用的拷贝构造函数是默认的拷贝构造函数,由编译器自动生成。