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