gpt4 book ai didi

c++ - 使用 default 关键字时的 Visual Studio C2580

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:14 25 4
gpt4 key购买 nike

对于下面的代码:

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;
}

我收到一条错误消息:

Error C2580 'S::S(void)': multiple versions of a defaulted special member functions are not allowed

我不明白。我认为错误是由模板化构造函数引起的(通过将其注释掉并编译程序来验证这一点)。

最佳答案

 template <typename... T>
S(T&&... params)
{
}

T 可以是空的给你留下一个默认构造函数,它可以是 S&& 给你留下一个移动构造函数,或者它可以是 const S & 给你留下一个复制构造函数。

但是您只是告诉编译器您想要这些的默认版本,所以它很困惑,因为您也只是为它们中的每一个都给出了明确的定义。

我会提出以下解决方案,因为它只是导致问题的默认构造函数,但此代码会使编译器崩溃:

struct S
{
S() = default;
S(S const&) = default;
S(S&&) = default;

S& operator=(S const& other) = default;
S& operator=(S&&) = default;

template <typename S, typename... T>
S(S&& s, T&&... params)
{
}
};

int main()
{
S s;
return 0;
}

关于c++ - 使用 default 关键字时的 Visual Studio C2580,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37202420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com