考慮一下:顯式初始化指針向量會導致轉換錯誤?
std::vector<int*> v(1, 0);
編譯沒有用VC++ 10(沒有任何警告,即使在最高警告級別)。但是,它不會在Linux上的mac或gcc上使用llvm進行編譯,並提供了一個錯誤,如「從不兼容的類型const int分配給int *」。我不在尋找解決方案 - 我知道第二個參數是不必要的,或者static_cast修復了錯誤。
我認爲零可以隱式轉換爲任何指針類型。是什麼賦予了?我能做到以下幾點:
int* i = 0;
int* const& ii = 0;
const int t = 0;
i = t;
據我所知,矢量構造簽名需要const T&
,當擴大了vector<int*>
成爲int* const&
是否正確?有人可以解釋這裏發生了什麼,以及VC++或非VC++編譯器是否正確?
嘗試'nullptr'而不是'0'。 – ildjarn 2012-04-04 19:06:09
您是否將其編譯爲C++ 03或C++ 11程序? – 2012-04-04 19:06:26
與問題無關,但是,爲什麼當[Bjarne說我們應該避免它們]時使用原始指針(http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11-樣式)? – 2012-04-04 19:10:34