xml*_*lmx 25 c++ standards constructor access-rights c++11
class A
{
public:
A() = default;
A(const A&) = delete;
};
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
Run Code Online (Sandbox Code Playgroud)
在任何情况下,这两个定义是否始终相同?
Dan*_*rey 37
它们与产生的诊断不同.如果您这样做private,则会报告其他多余的访问冲突:
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
int main()
{
A a;
A a2=a;
}
Run Code Online (Sandbox Code Playgroud)
得到GCC 4.8 的以下附加输出:
main.cpp: In function 'int main()':
main.cpp:6:5: error: 'A::A(const A&)' is private
A(const A&) = delete;
^
main.cpp:12:10: error: within this context
A a2=a;
^
Run Code Online (Sandbox Code Playgroud)
因此我建议总是制作删除的方法public.
我想扩大Daniel Frey的答案。我宁愿给这些方法一个访问修饰符,而不是总是 使已删除的方法成为public可能(假设)如果不将其删除,则赋予它们。(我不总是希望程序员有选择权。如果确实将它刻在石头上以制成删除的方法public,则应该由语言本身来实施。)
一些经验法则/准则:
public在大多数情况下,复制和移动分配运算符将处于具体和抽象的类中。public在大多数情况下,复制和移动构造函数将位于具体的类中。protected在大多数情况下,复制和移动构造函数将位于抽象类中。private位于具体的final类中,friends 在大多数情况下只能实例化。在所有情况下,您都向班级的适当用户而不是班级的所有用户进行公告。
| 归档时间: |
|
| 查看次数: |
3363 次 |
| 最近记录: |