最近更新了 clang(以及 xcode 和开发人员工具)并运行了一个简单的程序来查看它是否支持 c++11。看起来像这样:
#include <iostream>
using namespace std;
int main()
{
string my_array[5] = {"one", "two", "three"};
for (string &x : my_array)
cout << x << endl;
}
像这样在终端中编译:
clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp
并得到这个警告:
main.cpp:17:20: warning: range-based for loop is incompatible with C++98
[-Wc++98-compat]
for (string &x : my_array)
但它仍会生成可执行文件并按预期运行。为什么会产生这个错误?
最佳答案
这是警告而不是错误。警告消息还指出启用它的警告标志:-Wc++98-compat。启用此标志是因为您启用了 -Weverything(一个好主意,IMO)。要禁用特定警告,您可以传递一个警告标志,并在要禁用的警告名称前加上“no-”:
-Wno-c++98-compat
此警告的目的是允许将代码构建为 C++11 并获得一些 C++11 的好处,例如移动语义的性能改进,同时仍然生成与旧编译器兼容的代码。也就是说,这个警告并不表示程序有任何类型的问题,程序将像 C++11 规范所指示的那样工作(当然除了 clang 错误),但警告是为了通知你,如果你如果编译为 C++98,那么它将无法工作。
如果您不打算将代码构建为 C++98,那么此警告对您没有任何值(value),您应该简单地禁用它。
我相信在最新版本中也有一个 -Wc++11-compat 标志,因为 clang 支持(可能会被称为)C++14。
关于c++ - 尽管有更新,clang 还是产生了关于 c++11 的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21899028/