我們的團隊恰好碰到了這裏所描述http://forums.codeguru.com/archive/index.php/t-514404.html同樣的問題,即主叫some_vec.resize(new_size)
,其中N = new_size - some_vec.size()
與N> = 2,和VC10默認構造的所有N個新的元素,而GCC默認構造一個單一的元素,如原型元素,爲新元素複製構建N次。因爲這是uuid的向量,其中默認構造函數隨機初始化每個新實例,所以我們以N次與GCC相同的uuid和N個與VC不同的uuid結束。這足以在我們的測試套件中在一個平臺上造成破壞,而不是另一個平臺,並且找不到任何樂趣。std :: vector :: resize應該默認構建新元素多少次?
我的問題是這樣的:誰是對的? VC還是GCC?或者,這是C++的那些未被指定的心愛的角落之一? TIA,--DD
該標準已更改。這是一個類似的問題[std :: vector,默認構造,C++ 11和重大更改](http://stackoverflow.com/questions/5759232/stdvector-default-construction-c11-and-breaking-changes) – 2012-07-30 14:23:45
應該指出,你的班級有點「怪異」:基本上,你有'T x;你;'你有'x!= y'。這需要大量的額外的照顧和明確的文件... – 2012-07-30 14:25:18
隨機施工是一件壞事,你可以在你的例子中看到它。大多數代碼假定所有默認的構造對象都是相等的。要解決這些問題,你應該有一個隨機功能。或者創建隨機對象的工廠。 – Dani 2012-07-30 14:26:31