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