[英]clang produces warning regarding c++11 despite update
最近更新了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規范所指出的那樣(當然除了鏗鏘聲),但警告是告訴你,如果你要編譯為C ++ 98然后它將無法正常工作。
如果您不打算將代碼構建為C ++ 98,那么此警告對您沒有任何價值,您應該只是禁用它。
我相信在最新版本中還有一個-Wc ++ 11-compat標志,現在clang支持(可能會被稱為)C ++ 14。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.