如何在Mac Terminal中用C ++ 11编译C ++

我想在Mac Terminal中编译C ++ 11源代码,但是失败了。 我试过g++ -std=c++11g++ -std=c++0xg++ -std=gnu++11g++ -std=gnu++0x但是没有任何工作。 terminal总是读取unrecognized command line option 。 但是, g++ -std=gnu和类似的东西工作正常(当然C ++ 11源代码无法通过)。

我应该使用哪个选项来启用C ++ 11支持?

顺便说一句,我使用的命令行工具是安装在Xcode,我敢肯定,他们是最新的。

正如其他人指出,你应该使用clang++而不是g++ 。 另外,您应该使用libc ++库而不是默认的libstdc ++; 包含的libstdc ++版本相当陈旧,因此不包含C ++ 11库function。

 clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp 

如果你还没有安装Xcode的命令行工具,你可以运行编译器和其他工具,而不需要使用xcrun工具。

 xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp 

另外,如果有一个特定的警告要禁用,则可以将其他标志传递给编译器来执行此操作。 在警告消息结束时,它向您显示将启用警告的最具体的标志。 要禁用该警告,请在警告名称前添加no-

例如,你可能不想要c ++ 98兼容性警告。 在这些警告的结尾,它显示了标志-Wc++98-compat并禁用它们,通过-Wno-c++98-compat

XCode在编译时使用了clangclang++ ,而不是g++ (假设你没有定制东西)。 相反,请尝试:

 $ cat t.cpp #include <iostream> int main() { int* p = nullptr; std::cout << p << std::endl; } $ clang++ -std=c++11 -stdlib=libc++ t.cpp $ ./a.out 0x0 

感谢bames53的回答,指出我遗漏了-stdlib=libc++

如果你想使用一些GNU扩展(也可以使用C ++ 11),你可以使用-std=gnu++11而不是-std=c++11 ,它将打开C ++ 11模式并保持GNU扩展启用。