【发布时间】:2021-02-02 17:46:38
【问题描述】:
我正在尝试在 Visual Studio 上为我的项目设置 c++11,并找出默认情况下编译器使用的版本,我使用了以下代码:
#include <iostream>
int main(){
#if __cplusplus==201402L
std::cout << "C++14" << std::endl;
#elif __cplusplus==201103L
std::cout << "C++11" << std::endl;
#elif __cplusplus==199711L
std::cout << "C++" << std::endl;
#elif __cplusplus==201703L
std::cout << "C++17" << std::endl;
#elif __cplusplus==1
std::cout << "C+" << std::endl;
#endif
int* i = nullptr;
return 0;
}
输出 c++ (98) 我试图通过 CMakeLists 强制编译器使用 c++11,如下所示:
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
输出始终是 C++ (98),所以我添加了
int* i = nullptr;
令人惊讶的是,输出仍然是 c++ (98),但应用程序可以正常工作。这个“异常”是如何解释的?我如何知道/决定使用哪个标准?
【问题讨论】:
-
不要使用
==。您将错过介于两者之间的任何版本。使用>=。对于 Visual Studio,您可能需要测试_MSC_VER。例如,我的 C++11 测试如下所示:#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) -
更多关于潜在问题的信息在这里:stackoverflow.com/questions/14131454/…
-
好的,非常感谢您的回复和分享链接
-
请注意,根据 MSVS 的版本,您可能无法获得 C++11。例如,在 MSVS 2019 中,您可以使用的最低版本是 C++14。
标签: c++ visual-studio c++11 cmake