我正在尝试在 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 2012 __cplusplus and C++ 11 ,由@paddy 提供,这是 MSVC 的一个已知错误,因为版本宏设置为 C++98。您应该使用 /Zc:__cplusplus
进行编译switch 以将版本宏更改为正确的值。
关于c++ - 知道在 Visual Studio 上运行的是哪个版本的 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64435998/