[英]Differences between C++ compilers
在今天進行數據結構分配工作時,我遇到了一些我必須解決的錯誤,這些錯誤對我來說是很新的。 例如,以下內容:
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是否不與較早的編譯器向后兼容? 我可以更改設置嗎? 只是尋找關於事物的一般知識,在使用各種編譯器時,我應該知道這些知識。
默認情況下, g++
將以C ++ 03模式編譯,這是C ++ 11之前的C ++標准。 要告訴g++
您的代碼實際上是C ++ 11代碼,您必須使用-std=c++11
編譯器開關。 例如:
g++ -std=c++11 -o test test.cc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.