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
的值以匹配您选择的变量。

同时检查,而不是(逻辑或)。好的,我已经编辑了它。相关: