-std = c ++ 11和-std = gnu ++ 11之间有什么区别?

时间:2012-05-16 06:29:24

标签: c++ gcc c++11 clang

-std=c++11-std=gnu++11作为gcc和clang的编译参数有什么区别?与c99gnu99同样的问题?我了解C ++和C标准,这是我感兴趣的参数差异。

我在某处看到它与某些扩展有关,但我不清楚哪些扩展以及如何在新项目中选择其中一个。

1 个答案:

答案 0 :(得分:76)

正如您自己发现的那样,两个选项之间的区别在于是否启用了违反/扩展C ++标准的GNU扩展。 GNU C ++扩展描述为here。您还可以在C ++程序中使用大多数GNU C扩展(描述为here)。阅读-Wpedantic GCC选项here

也很有用

请注意,使用-std=c++11时,某些扩展程序仍然有效,只要它们与标准不矛盾。例如,在使用MinGW编译器时,我需要工作Boost.Lexical_Cast的扩展。但是,只要你不使用它们中的任何一个,你最好坚持使用没有扩展的标准以获得最大的可移植性。如果您发现自己被迫改变编译器,这可能会派上用场。