jap*_*iss 26 c++ const private public
class C
{
public:
void foo() const {}
private:
void foo() {}
};
int main()
{
C c;
c.foo();
}
Run Code Online (Sandbox Code Playgroud)
MSVC 2013不喜欢这样:
> error C2248: 'C::foo' : cannot access private member declared in class 'C'
Run Code Online (Sandbox Code Playgroud)
如果我转向const
参考,它的工作原理:
const_cast<C const &>(c).foo();
Run Code Online (Sandbox Code Playgroud)
为什么我不能const
在非const
对象上调用该方法?
jua*_*nza 24
对象不是const
,因此非const
过载是更好的匹配.在访问检查之前发生过载解析.这可确保通过更改成员函数的访问权限,不会无意中更改重载决策.
imr*_*eal 22
从标准:
13.3.3如果存在一个最好的可行函数并且是唯一的,则重载决策成功并将其作为结果产生.否则重载解析失败并且调用格式错误.当重载决策成功,并且在使用它的上下文中无法访问最佳可行功能(第11条)时,程序是不正确的.
归档时间: |
|
查看次数: |
742 次 |
最近记录: |