问题 我可以在类体中默认私有构造函数吗?


GCC 4.5不允许我这样做:

class foo {
public:
    foo() = default;

private:
    foo(foo const&) = default;
    foo& operator=(foo const&) = default;
};

它抱怨说:

错误:使用非公共访问声明的'foo :: foo(const foo&)'不能在类体中默认
  错误:声明为非公共访问的'foo&foo :: operator =(const foo&)'不能在类体中默认

但是,GCC 4.6让我这样做。哪一个是正确的?


10646
2017-08-29 00:18


起源



答案:


N3291中没有任何内容表明您无法声明某些内容 private 和 default。请注意,这是一个 更改 按照8.4.2第2节的规定;早期版本说他们必须公开。


11
2017-08-29 00:30



有时候私下默认是很好的... - Kerrek SB
“如果两者都被冻结,走在水上并从规范开发软件很容易。” - E. Berard。 - Matthieu M.


答案:


N3291中没有任何内容表明您无法声明某些内容 private 和 default。请注意,这是一个 更改 按照8.4.2第2节的规定;早期版本说他们必须公开。


11
2017-08-29 00:30



有时候私下默认是很好的... - Kerrek SB
“如果两者都被冻结,走在水上并从规范开发软件很容易。” - E. Berard。 - Matthieu M.