對於下面的代碼:的Visual Studio C2580默認關鍵字
struct S
{
S() = default;
S(S const&) = default;
S(S&&) = default;
S& operator=(S const& other) = default;
S& operator=(S&&) = default;
template <typename... T>
S(T&&... params)
{
}
};
int main()
{
S s;
return 0;
}
我得到一個錯誤信息:
錯誤C2580 '的s :: S(無效)':的多個版本拖欠特別 不允許會員功能
我不明白。我認爲這個錯誤是由模板構造函數引起的(通過註釋並驗證程序編譯來驗證它)。
我想'S(S &&);'應該有自定義實現。因爲這是你偷走傳遞給它的參數的內存區域(即數據)的函數,否則它將與S(S const&)相同;'同樣適用於'operator =' – sameerkn
一個'main()'實際上將你的編譯錯誤運用到這個問題上會讓這個問題變得更加健壯。也許更新這個問題 – WhozCraig
你的模板化構造函數可以和你的任何一個defa因爲編譯器不知道你想要做什麼。它可以是默認,複製或移動構造函數。你說你想要默認,但你也提供了一個自定義的實現。 – xaxxon