class A
{
public:
A() = default;
A(const A&) = delete;
};
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
这两个定义在任何情况下总是彼此相同吗?
class A
{
public:
A() = default;
A(const A&) = delete;
};
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
这两个定义在任何情况下总是彼此相同吗?
它们仅在产生的诊断方面有所不同。如果你成功了private
,则会报告一个额外的和多余的访问冲突:
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
int main()
{
A a;
A a2=a;
}
从 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;
^
因此我建议总是删除方法public
。
我想扩展Daniel Frey 的回答。我宁愿给这些方法一个访问修饰符,而不是总是让这些方法被删除,如果它们不被删除,你会(假设) 给这些方法。(我不喜欢程序员有选择权的情况。如果确实要刻板地制作删除方法,那么它应该由语言本身强制执行。)public
public
一些经验法则/指南:
public
位于具体和抽象类中。public
位于具体类中。protected
位于抽象类中。private
具体类中。final
friends
在所有情况下,您都会向班级的适当用户而不是班级的所有用户发布通知。