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

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

我已经在某个地方看到它与一些扩展有关,但是我不清楚哪些扩展,以及如何在一个新项目中select其中之一。

正如你自己发现的,两种select之间的区别在于是否启用了违反C ++标准的GNU扩展。 这里描述了 GNU扩展。 请注意,使用-std=c++11时,一些扩展仍然可以生效,只要它们与标准不矛盾即可。

例如,当使用MinGW编译器时,我需要一个工作Boost.Lexical_Cast的扩展。 但是,只要你不使用任何一个,你最好坚持标准没有扩展最大的便携性。 如果您发现自己被迫更改编译器,这可能会派上用场。