C++11 使用MSVC语言代替cplusplus安全吗? 我试图用微软Visual C++编译器编译一个多平台C++项目(以前是GCC,其他编译器)。
现在我遇到了一些预处理器指令,如下所示:C++11 使用MSVC语言代替cplusplus安全吗? 我试图用微软Visual C++编译器编译一个多平台C++项目(以前是GCC,其他编译器)。,c++11,visual-c++,C++11,Visual C++,现在我遇到了一些预处理器指令,如下所示: #if __cplusplus < 201103L // Define some macros of C++11 the code really relies on. // [...] #endif \if\uu cplusplus=201402L在多大程度上不符合C++11?首先,如果您想要一个可移植的解决方案,您可以: #if __cplusplus < 201103L && _MSVC_LANG <
#if __cplusplus < 201103L
// Define some macros of C++11 the code really relies on.
// [...]
#endif
\if\uu cplusplus<201103L
//定义代码真正依赖的C++11的一些宏。
// [...]
#恩迪夫
虽然我使用的是Visual Studio 2015,\uu cplusplus
仍然被定义为199711L
。建议也检查\u MSVC\u LANG
\u MSVC\u LANG>=201402L
在多大程度上不符合C++11?首先,如果您想要一个可移植的解决方案,您可以:
#if __cplusplus < 201103L && _MSVC_LANG < 201103L
/* ... */
#elif __cplusplus >= 201402L || _MSVC_LANG >= 201402L
#if(如果)cplusplus<201103L&&MSVC(如果)LANG<201103L
/* ... */
#elif | u cplusplus>=201402L | | u MSVC_LANG>=201402L
您链接的评论指出,\uucplusplus
设置不正确是一个bug,测试\umsvc\ulang
是一个权宜之计。然而,带有/std:c++14
的VC 2017(19.10.25017)仍然将\uu cplusplus
设置为199711
。我不确定这是否意味着对C++14的支持还没有完全完成,或者他们根本就没有意识到这一点
\u MSVC\u LANG
宏是Microsoft的扩展。大多数其他编译器不设置它,以便更容易测试编译器是否为Microsoft。(有一个例外:clang++--std:c++14-fms兼容版本=19.10
将\uuuCPlusplus
和\uMSVC\uLang
设置为201402L
,因为这是其MSVC兼容模式。)
ETA:感谢匿名评论者指出有一个
/Zc:\uucplusplus
编译器开关,它设置\uuucplusplus
的值以匹配您选择的变量。同时检查,而不是(逻辑或)。好的,我已经编辑了它。相关: