今天我在處理數據結構的任務時遇到了一些我必須解決的錯誤,這些錯誤對我來說都是非常新的。例如,以下內容:C++編譯器之間的差異
struct Node
{
// data and stuff
Node(const T& d = T{}, Node * const p = nullptr,
Node * const n = nullptr, unsigned int f = 0)
: data(d), prev(p), next(n), freq(f) {}
// other stuff
};
這在Visual Studio中運行得非常好,但在g ++中卻沒有。即使Visual Studio要我使用nullptr,我也必須將nullptr更改爲0。
使用學校的編譯器另一起事件給我的以下消息:
warning: extended initializer lists only available with -std=c++0x
所以很自然我繼續將此添加到我的makefile文件。
這讓我想知道,考慮到將來我會編寫更復雜的程序,我會多久看一次編譯器的簡單差異導致的錯誤? Visual Studio是否不能與舊版編譯器兼容?我可以更改設置嗎?只是尋找關於使用各種編譯器時應該注意的事情的一般知識。
您應該通過添加'-std = C++ 11''開關告訴g ++您正在構建C++ 11代碼。 g ++將默認編譯(我認爲)在C++ 03模式下。 – 2014-10-16 18:37:35
'nullptr'是一個C++ 11的東西,默認情況下,gcc不會在C++ 11中編譯,而VS的新版本可以。 – juanchopanza 2014-10-16 18:37:55
「我多久會看到編譯器中簡單差異導致的錯誤」 - 如果您不瞭解C++標準版本和配置編譯器之間的區別,那麼經常會這樣。否則,並不經常。 「Visual Studio是不是與舊版編譯器兼容?」 - 這甚至沒有意義。 – 2014-10-16 18:39:49