2 个默认的复制构造函数:可能吗

2 defaulted copy constructors: is it possible?

本文关键字:构造函数 复制 默认      更新时间:2023-10-16

以下程序格式不正确吗?

struct Foo
{
    Foo(Foo&) = default;
    Foo(const Foo&) = default;
};
int main() 
{
}

它使用 clang++ 3.8.0 和 g++ 6.3.0 成功编译(编译器标志-std=c++11 -Wall -Wextra -Werror -pedantic-errors(。

为什么这应该是格式错误的?定义两个复制构造函数,一个需要非 const 参数,另一个可以使用 const 参数。然后告诉编译器它应该对这两个构造函数使用其默认实现。除非编译器有理由消除默认的复制构造函数,否则您也可以删除这两行并获得相同的结果。此外,我认为第一个版本是多余的,因为默认实现无论如何都应该可以使用 const 参数。仍然定义两者是合法的,因为您可能希望在这两种情况下做一些不同的事情。