gpt4 book ai didi

c++ - 私有(private)嵌套类 c++ 的实例

转载 作者:IT老高 更新时间:2023-10-28 22:21:50 24 4
gpt4 key购买 nike

我有以下代码

class A
{
private:
class B
{
public:
void f()
{
printf("Test");
}
};
public:
B g()
{
return B();
}
};


int main()
{
A a;
A::B b; // Compilation error C2248
A::B b1 = a.g(); //Compilation error C2248
auto b2 = a.g(); // OK
a.g(); // OK
b2.f(); // OK. Output is "Test"
}

如您所见,我有 A 类和私有(private)嵌套类 B。如果不使用 auto 我无法在 A 之外创建 A::B 的实例,但使用 auto 我可以。有人可以解释这里有什么问题吗?我使用 VC++ 12.0、13.0、14.0(总是相同的行为)

最佳答案

B 类型只有AA 的 friend 可以访问,这意味着其他代码不能引用它。另一方面,模板类型推导甚至适用于私有(private)类型,如果您想在 A 的代码中的任何形式的模板中使用私有(private)类型,则需要这样做。

auto功能基于模板类型推导,遵循相同的规则,允许调用auto b2 = a.g();

关于c++ - 私有(private)嵌套类 c++ 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27573329/

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