8
可能重複:
std::string x(x);爲什麼你可以調用一個拷貝構造函數傳入正在構造的對象? (C++)(GCC)
class A {};
int main() {
A a(a);
}
這將編譯。
海合會(GCC)4.7.2 20120921(紅帽4.7.2-2)
g++ -o main main.cpp -Wall -w -ansi
我沒有收到警告。
爲什麼這看起來是有效的C++?
這是在標準中的任何地方提到的嗎?
是否有警告標誌可以報告這個gcc?
當類有成員數據時,數據結束隨機。
例如:
#include <iostream>
class A {
public:
int i;
A() : i{6} {}
};
int main() {
A a(a);
std::cout << a.i << '\n';
}
輸出:-482728464
這是怎麼回事? 另外,如何防止我意外地做到這一點? - 是否有可能使其成爲編譯器錯誤?
請注意更簡單的例子,int i = i;'。 – GManNickG
Clang 3.2最近檢查了它的算法來檢測這種情況,你可以檢查[uninitialized.cpp](http://llvm.org/svn/llvm-project/cfe/trunk/test/SemaCXX/uninitialized.cpp)文件從測試套件中查看它警告的所有情況。請記住,使用gcc,*未初始化的*警告可能與優化級別相關,並且可能只會觸發「O1」或「O2」構建。 –