c 11 主要的新语言特性,关于c ++ 11:有没有办法确定C ++编译器实现的语言特性?...

本文探讨了在创建C++库时如何通过编译时功能测试集判断编译器对特定语言特性的支持,涉及不同编译器的状态跟踪和Boost.Config库的使用实例。作者强调了理解编译器支持范围的重要性,并提到了C++委员会的功能测试建议和相关宏的最新文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不同的C ++编译器在不同的时间点实现各种语言功能(例如,参见clang C ++ status和gcc c ++ status;同样适用于其他编译器)。 在创建C ++库时,通常需要支持最新功能以改善用户体验。 当支持新功能而不是在任何地方实现的公共子集时,了解编译器支持哪些功能而不必为每个编译器支持一组版本号是有帮助的。

是否有合理标准化的功能测试集可以在编译时用于确定编译器是否支持特定的语言功能?

对于声誉很高的人来说,这是一个非常糟糕的问题。 这是非常自以为是的。

@EdHeal从实际角度来看也非常重要

可能已经被程序员回答了.stackexchange.com / items / 199708 /

@EdHeal:问题可能有一定程度的意见。 我也认为有一个完全中立的答案。

@PeterM:虽然我看了,但我没有在那里找到问题。 奇怪的是,它也被认为是偏离主题的 - 也许它在这里是主题。

我所做的只是谷歌c++ compiler test suite,这是最重要的链接

第二个链接是opengroup.org/testing/testsuites/perenial.htm

您可能无法比Boost.Config库做得更好。它定义了各种C ++ 11和C ++ 14特性的预处理器宏,这些特性在VC ++等C ++ 11/14-ish编译器上并不普遍支持。它就像你要达到标准一样接近。

IIRC,它与autoconf类似,通过预建(并在必要时执行)一堆简单的测试程序。我不认为你会得到任何完全在编译时运行的东西,只是因为在一个实现中存在关键字,而在另一个实现中存在语法错误。

这个答案是一般定理的必然结果,如果你有C ++问题,首先看看Boost是否有答案。

"IIRC,它与autoconf类似,通过预建(并在必要时执行)一系列简单的测试程序。" 不,Boost.Config实际上是完全编译时,每个编译器,标准库和平台配置使用版本检测宏来选择性地启用随后通过宏而不是关键字使用的功能。

我没有尝试使用这些建议,但在C ++委员会会议上,功能测试SG(SG10)满足并更新了一系列建议。这是列出当前功能测试宏的最新文档:有各种语言级功能的宏。期望在将新功能投入工作草案时更新文档P0096rx。

本文档不是标准文档:标准要求实现语言标准,标准化宏指示是否实现特定功能是没有意义的!实现要么完全符合要么不符合要求。但是,期望编译器供应商确实使用这些宏作为帮助用户的指导。

不幸的是,上次我检查MSVC没有计划实现功能测试宏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值