您如何知道您的编译器支持哪个版本的 ISO C++ 标准? [复制]

Posted

技术标签:

【中文标题】您如何知道您的编译器支持哪个版本的 ISO C++ 标准? [复制]【英文标题】:How can you tell which version of the ISO C++ standard your compiler supports? [duplicate] 【发布时间】:2011-08-20 14:58:54 【问题描述】:

可能重复:How to determine the version of the C++ standard used by the compiler?

您的程序有没有办法在编译时确定这一点?有可以使用的预处理器宏吗?

我知道 g++ 有这个nice matrix of c++0x/c++11 feature support。这对于其他流行的编译器是否存在?是否有任何标准(事实上或其他)方法可以使用预处理器来测试给定特征的存在?

有一个关于这个的问题,但答案似乎不是很完整:How to determine the version of the C++ standard used by the compiler?

我知道 Boost.Config 可以做到这一点,但它是如何做到的呢?很高兴知道我是否出于某种原因不想使用 Boost。

我将其作为副本关闭,因为有人编辑了 answers in the original question 之一以使其更加完整。

【问题讨论】:

@Bo Persson - 我很想自己删除这个问题。这个问题没有特别有用的答案。哎呀,我在 g++ 错误报告中找到了比那个问题更有用的答案。也没有人在这里为任何体面的答案而烦恼。 @Omnifarious - 我添加了一个特征矩阵的链接,类似于 boost.config 中使用的一个 boost。 我认为没有任何语言标准答案,只有编译器手册记录了 C++11 支持的数量。委员会特别拒绝了为部分实现使用宏的想法。他们希望编译器实现整个语言! 啊哈哈..third time today... @Tomalak - 凭借 C++0x 投票产生的新闻,它很可能不会是最后一个...... 【参考方案1】:

__cplusplus的值

在 C++0x 中,宏 __cplusplus 将设置为不同的值 从(大于)当前的 199711L。

http://predef.sf.net 有一些用于检测特定标准的值。

您所链接的问题上的Boost.Config recommendation 也是很好的建议,并提供了更细粒度的答案。我认为它基本上编码了feature matrix 并定期更新它。

【讨论】:

哪些值对应哪些标准? 而且,实际上(这是 g++ 中的一个错误)g++ 将此宏定义为 1,即使您在命令行上指定了 -std=c++0x 这可能是承认他们的支持不完整。不过,它使 Boost.Config 更有价值。 wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport 也有一个有用的特征矩阵。 Apache wiki 正是我正在寻找的那种东西。【参考方案2】:

要朝着我希望的方向快速开始,这里有一些我从g++ bug report 收集到的有用信息。

C++ pre-C++98:__cplusplus1。 C++98:__cplusplus199711L。 C++0x/11:__cplusplus201103L

【讨论】:

以上是关于您如何知道您的编译器支持哪个版本的 ISO C++ 标准? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在哪个 ISO C++ 版本中引入了迭代器?

linux如何查看编译器支持的C++版本(支持C++11支持C++14支持C++17支持C++20)(编译时不指定g++版本,默认使用老版本编译)

linux如何查看编译器支持的C++版本(支持C++11支持C++14支持C++17支持C++20)(编译时不指定g++版本,默认使用老版本编译)

visual c++ win10系统 安装程序时显示 正在更新您的系统怎么办

如何在升级 Laravel 时选择第三方包版本

2g内存装ubuntu哪个版本