gpt4 book ai didi

c++ - 常量重载 : Public-Private Lookup in C++ Class

转载 作者:可可西里 更新时间:2023-11-01 18:41:50 25 4
gpt4 key购买 nike

以下代码无法编译,显示“错误 C2248:‘A::getMe’:无法访问类‘A’中声明的私有(private)成员”。为什么?我正在尝试调用公共(public)接口(interface)。

class B
{
};

class A
{
public:
const B& getMe() const;
private:
B& getMe();
};

int main()
{
A a;
const B& b = a.getMe();
return 0;
}

最佳答案

其他答案中未提及的部分问题是可访问性和可见性在 C++ 中是独立的概念。 B& A::getMe() 私有(private)成员在 main 中可见,即使它不可访问。因此,在您的调用 a.getMe() 中,有两个重载成员需要考虑,B& A::getMe()B const& A::getMe()常数。由于 a 不是 const,它是被选中的私有(private)成员。然后你会得到一个错误,因为它不可访问。如果您没有私有(private)非 const 成员函数,您将拥有 const 成员作为唯一的可能性,并且它会被调用,因为 const 成员可以在非 const 对象上调用。

请注意,如果可见性以可访问性为条件,您可能会有其他类型的令人困惑的行为:您重构一个成员,调用类外部的私有(private)成员。现在,私有(private)成员不再可访问,因此调用是对另一个公共(public)成员的调用。这种无声的行为改变可能会导致错误难以追踪。

总而言之:无论您的语言规则是什么,都不要过度使用不同的可访问性,否则会导致混淆。

关于c++ - 常量重载 : Public-Private Lookup in C++ Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1361618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com