【发布时间】:2016-12-26 19:17:12
【问题描述】:
考虑这段代码:
struct A
{
void foo() const
{
std::cout << "const" << std::endl;
}
private:
void foo()
{
std::cout << "non - const" << std::endl;
}
};
int main()
{
A a;
a.foo();
}
编译错误是:
错误:“void A::foo()”是私有的。
但是当我删除私人的时,它就可以工作了。为什么非 const 方法是 private 时不调用 public const 方法?
换句话说,为什么重载解决在访问控制之前?这很奇怪。你认为它是一致的吗?我的代码可以工作,然后我添加了一个方法,我的工作代码根本无法编译。
【问题讨论】:
-
在 C++ 中,如果没有像使用 PIMPL 成语那样的额外努力,类中就没有真正的“私有”部分。这只是它引起的问题之一(添加“私有”方法重载和破坏编译旧代码在我的书中被视为一个问题,即使这个问题通过不这样做很容易避免)。
-
是否有任何现实生活中的代码您希望能够调用 const 函数但其非 const 对应物将成为私有接口的一部分?对我来说,这听起来像是糟糕的界面设计。
标签: c++ overloading overload-resolution private-methods const-method