2个默认的拷贝构造函数:这可能吗?

Con*_*tor 3 c++ default copy-constructor default-copy-constructor c++11

以下计划是否格局不正确?

struct Foo
{
    Foo(Foo&) = default;

    Foo(const Foo&) = default;
};

int main() 
{
}
Run Code Online (Sandbox Code Playgroud)

它成功编译了clang ++ 3.8.0g ++ 6.3.0(编译器标志-std=c++11 -Wall -Wextra -Werror -pedantic-errors).

Mar*_*zer 7

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