簡體   English   中英

盡管有更新,clang會對c ++ 11發出警告

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM