首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11特性的可用性

C++11特性的可用性
EN

Stack Overflow用户
提问于 2015-05-16 16:07:19
回答 3查看 1K关注 0票数 7

编译器供应商一直在零敲碎打地采用C++11特性,这是可以预测的,因为其中许多特性并不容易实现。

报告编译器完全支持的规范的标准方法是通过__cplusplus预定义宏。然而,主要的供应商都在报告__cplusplus = 199711L,这意味着他们只完全支持C++98 (例如。MSVC14)。这(大概)意味着他们不完全支持C++11规范,尽管他们可能已经实现了大部分的功能。

当C++11特性可用时,我想开始使用它们(当它们不可用时,使用现有代码)。但是,我的代码必须支持许多编译器,包括我可能无法使用的专有编译器。有没有任何标准的方法可以知道哪些C++11特性可以从编译器中获得,而不知道具体使用的是哪个编译器呢?(如果编译器以非标准的方式运行,则检测行为不正确是可以接受的)。

注意:这个问题是我的问题'assert c++11‘的概括,这个问题不是很受欢迎,因为我认为我的动机被误解了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-16 16:26:06

您可能对feature test macros感兴趣,它使您能够测试特定的C++11、C++14甚至C++17特性,例如__cpp_static_assert__cpp_lib_make_unique__cpp_variable_templates。Clang和GCC已经支持这一点,见live demo

票数 5
EN

Stack Overflow用户

发布于 2015-05-16 16:09:56

默认情况下,g++/clang++没有启用C++11,甚至没有启用最新版本。每当您使用g++使用-std=c++11进行编译时,您的宏__cplusplus将具有预期的值。

VS似乎默认启用了所有功能,谢谢@Comic,但是它没有更新宏,因为它还没有完全兼容C++11。

至于检测泛型编译器的"C++11可用性“,我不知道任何可移植的方法,除非您检查__cplusplus宏。但是,正如您所观察到的,在默认情况下,宏可能不会为某些编译器实现(就像g++/clang++那样),或者根本没有实现(VS)。在这个阶段,您唯一的选择似乎是像CMake这样的外部工具,它可以检测编译器,而条件是编译器类型的CMake可以定义一些宏,您可以在代码中签入这些宏来启用C++11。

票数 1
EN

Stack Overflow用户

发布于 2015-05-16 16:09:05

我认为GCC 4.8也提供了许多C++11功能。使用-std=c++11选项编译程序。

我认为C++11的一些特性也在GCC 4.6.3中。编译选项来启用它的-std=c++0x。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30277865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档