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

时间:2017-04-10 08:07:37

标签: c++ c++11 default copy-constructor default-copy-constructor

以下程序是否格式错误?

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)。

1 个答案:

答案 0 :(得分:7)

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