gpt4 book ai didi

c++ - 如果 Outer 类是我的 friend ,那么 Outer::Inner 类也是吗?

转载 作者:太空狗 更新时间:2023-10-29 21:13:47 27 4
gpt4 key购买 nike

以下代码在 MSVC 上编译:

#include <iostream>

class Bob
{
int a;
friend class Outer;
};
class Outer
{
class Inner
{
void f(Bob obj)
{
std::cout << obj.a; //OK
}
};
};

所以看起来如果 Outer 是 Bob 的 friend ,那么 Inner 也是自动的。我正在阅读标准的 Friends 章节,但找不到可以证实或反驳这一点的条款。

这是否合法,如果合法,章节是什么?

最佳答案

[class.access.nest]/1 指出

A nested class is a member and as such has the same access rights as any other member

所以我相信是的,这是标准行为。

假设 Outer 有一个成员函数 foo()。当然,该函数将有权访问 Bob 的成员。据我了解,我引用的部分暗示 Outer 中的任何嵌套类都将具有与 foo() 相同的访问权限,因此能够访问 Bob 的成员。

另外值得注意的是,该标准包含以下示例([class.friend]/2),请注意A::B的用法>Y:

class A {
class B { };
friend class X;
};

struct X : A::B {
// OK: A::B accessible to friend
A::B mx; // OK: A::B accessible to member of friend
class Y {
A::B my; // OK: A::B accessible to nested member of friend
};
};

关于c++ - 如果 Outer 类是我的 friend ,那么 Outer::Inner 类也是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42926317/

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