簡體   English   中英

默認的復制構造函數和復制賦值賦值運算符給出了奇怪的錯誤

[英]Defaulted copy constructor and copy assignment assignment operator giving strange error

我已經默認了我的復制構造函數和復制賦值運算符,如下所示:

  Config(const Config& config) = default;
  Config& operator=(const Config& rhs) = default;

然后通過友誼將這些權限提供給一個獨立的功能。 在創建配置對象的副本后,我收到以下警告並注意(?):

./cfg/config.hpp:129:3:警告:未使用的參數'config'[-Wunused-parameter] cfg / get.cpp:在函數'const cfg :: Config&cfg :: Get(bool)'中:cfg / get.cpp:34:30:注意:這里首先需要合成方法'cfg :: Config :: Config(const cfg :: Config&)'

看起來復制構造函數甚至沒有被實例化。 盡管如此,代碼似乎運行。

gcc版本4.6.3(Ubuntu / Linaro 4.6.3-1ubuntu5)

只需省略參數:

Config(const Config&) = default;
Config& operator=(const Config&) = default;

上述語句指示編譯器生成所述類型的默認特殊成員函數,但未指定這些實現的詳細信息。 參數名稱是多余的,無效。 編譯器可以自由發出合法代碼的警告。

從§8.4.2開始:

......明確默認的功能應該

- 成為特別會員,

- 具有相同的聲明函數類型(可能不同的ref限定符除外,在復制構造函數或復制賦值運算符的情況下,參數類型可以是“引用非const T”,其中T是名稱成員函數的類)就像它已被隱式聲明一樣......

我今天剛遇到這個; 雖然我只是使用“省略名稱”的解決方法,但是針對GCC有兩個相關的錯誤:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50895 - 建議忽略虛擬方法上的“未使用參數”警告(或者可能只是空虛擬方法)。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57211 - 這個問題(默認方法中未使用的參數名稱),由於行/列錯誤指示符指向類頂部而變得復雜定義,而不是默認的默認方法。

從我對bug的評論中可以看出,我的興趣在於使我的文檔更加一致。 理想情況下,我可以讓我的代碼和我的文檔都在沒有警告的情況下構建。

如果沒有別的,這里的警告是IMHO不正確:參數肯定是使用的,它只是由不同的名稱或通過其他機制使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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