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.0和g ++ 6.3.0(编译器标志-std=c++11 -Wall -Wextra -Werror -pedantic-errors).
为什么这应该是不正常的?您定义了两个复制构造函数,一个期望非const参数,另一个可以使用const参数.然后告诉编译器它应该使用它们对这两个构造函数的默认实现.除非编译器有理由消除默认的复制构造函数,否则您也可以删除这两行并获得相同的结果.另外我认为第一个版本是多余的,因为默认的实现应该可以使用const参数.仍然定义两者都是合法的,因为你可能想要在两种情况下做一些不同的事情.