簡體   English   中英

C ++編譯器之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM