2012-10-09 77 views
3

我已經拖欠我的拷貝構造函數和拷貝賦值運算符如下:默認拷貝構造函數和拷貝賦值賦值運算符給奇怪的錯誤

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

,然後給經友好訪問這些到一個獨立的功能。 在創建一個配置對象的副本,我得到以下警告和注意事項(?):

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

它會出現複製構造函數甚至沒有被實例化。 儘管如此,代碼似乎運行。

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

+0

[適用於g ++](http://ideone.com/EoCtB)。可能是編譯器問題。 – iammilind

+0

你在標題中提到了一個錯誤,但在這裏你只顯示一個警告。 – juanchopanza

+0

對不起,我最初在我的問題中也有錯誤,在糾正之前,忘記了正確的標題! – goji

回答

7

只是省略參數:

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

上述指示語句編譯器生成的類型的默認特殊成員函數聲明,但這些實現的細節沒有指定。參數名稱是多餘的,不起作用。編譯器可以自由地爲合法代碼發出警告。

從§8.4.2:

...這是明確違約函數應

- 是一個特殊的成員函數,

- 具有相同的聲明的函數類型(除可能與ref-qualifiers有所不同,除了在複製構造函數或複製賦值運算符的情況下,參數類型可能是「引用非const T」,其中T是成員函數類的名稱),就好像它有已被隱含地宣佈...

+1

有什麼具體原因?如果我提供參數名稱會發生​​什麼? – Naveen

+1

我想編譯器在這裏說的夠了:警告:未使用的參數'config' –

+0

@Naveen'XXXX = default'只是編譯器生成匹配特定函數類型的特殊成員的指令。沒有具體說明實際執行的細節。這裏的參數不起作用。 – juanchopanza

0

我今天剛碰到這個;雖然我只是使用「省略名稱」的解決方法,但有兩個相關的錯誤對GCC打開:

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

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57211 - 這個問題(在默認方法上未使用的參數名稱),複雜的事實是行/列錯誤指示器指向類defn的頂部,而不是在默認方法defn。

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

如果沒有別的,這裏的警告是恕我直言不正確:該參數是肯定使用的,它只是由不同的名稱或通過其他機制使用。順便說一句,

相關問題