这个问题已经在这里有了答案:




已关闭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。所使用的拷贝构造函数是默认的拷贝构造函数,由编译器自动生成。

10-06 05:23
查看更多