UPDATE2編譯器警告的:缺乏與不正確初始化梅開二度
由於懷疑,這並不一定與具有初始化列表構造做。從R.費爾南德斯Martinho的評論很明顯,它只是試圖構造一個對象與自身的副本使用大括號語法時未檢測:
struct C{
C(){}
};
struct D{
C c0{c0}; // << -- compiles without warning
C c1(c1); // << -- does not compile
};
的問題依然存在。本案例的標準是否需要診斷?我意識到診斷對於各種錯誤是不可能的或不切實際的。
我結束了這個報告,因爲錯誤57758。
原題:
我認識好管理編寫錯誤代碼(由純打錯),最終產生的寄生bad_alloc
例外。我不知道是否有一個很好的理由gcc(4.7.2和4.8.1)不警告這一點。
是一個診斷要求,這種情況下的標準呢?我意識到診斷對於各種錯誤是不可能的或不切實際的。
這就是它歸結爲:
#include <initializer_list>
struct A{};
struct C{
C(std::initializer_list<A*> as){}
};
struct D{
C c{c}; // <<- well...
};
int main(){
D d;
}
編輯:我提initializer_list
的原因是,如果我刪除了初始化列表構造我得到一個錯誤:error: too many initializers for ‘C’
我認爲這是造成的,由於沒有用戶定義(用戶聲明?)構造函數,我得到骨料初始化,這是不行的,因爲在C.沒有成員(C型)的事實
什麼是initializer_lists的關係?這只是來自未初始化變量的副本。 –
c {c}是什麼意思? –
由於c不是'A *',它意味着一個副本。 –