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

2 defaulted copy constructors: is it possible?

下面的程序格式不正确吗?

struct Foo
{
    Foo(Foo&) = default;

    Foo(const Foo&) = default;
};

int main() 
{
}

它成功 compiles with clang++ 3.8.0 and g++ 6.3.0(编译器标志是 -std=c++11 -Wall -Wextra -Werror -pedantic-errors)。

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