C++ 嵌套类是否获得外部类的友谊关系? #包括 #包括 甲级{ B级朋友; std::string m=“Hello”; }; 结构B{ 结构{ void f(){ A A; 标准很清楚,友谊不是遗传的:

C++ 嵌套类是否获得外部类的友谊关系? #包括 #包括 甲级{ B级朋友; std::string m=“Hello”; }; 结构B{ 结构{ void f(){ A A; 标准很清楚,友谊不是遗传的:,c++,friend,C++,Friend,14.3/10:“友谊既不是继承的,也不是传递的” 但嵌套类不是继承。它是一个成员。如果类是友元,则其成员可以访问该类的友元。因此,内部/嵌套类具有访问权限 直接从标准: 14.3/2将一个类声明为朋友意味着授予友谊的类中的私人和受保护成员的姓名可以 可以在的基说明符和成员声明中访问 结交朋友的班级。例如: 你知道你可以把你的代码样本放在一个编译器里自己看看,对吗?你试过了吗?你有没有得到让你问这个问题的相互矛盾的结果?我认为这最终是一个重复:关键字:嵌套类是一个成员,因此与任何其他成员具有相同

14.3/10:“友谊既不是继承的,也不是传递的”

但嵌套类不是继承。它是一个成员。如果类是友元,则其成员可以访问该类的友元。因此,内部/嵌套类具有访问权限

直接从标准:

14.3/2将一个类声明为朋友意味着授予友谊的类中的私人和受保护成员的姓名可以 可以在的基说明符和成员声明中访问 结交朋友的班级。例如:


你知道你可以把你的代码样本放在一个编译器里自己看看,对吗?你试过了吗?你有没有得到让你问这个问题的相互矛盾的结果?我认为这最终是一个重复:关键字:
嵌套类是一个成员,因此与任何其他成员具有相同的访问权限。
B
的(函数和数据)有
friend
访问
A
N
,因为它也是一个成员。没有关系。所讨论的友谊不是在内部和外部阶级之间。友谊是在顶级阶级之间。我只想了解友谊是如何“分配”的.友谊是如何绑定的?范围?它与我引用的原因有关。
N
B
的成员,因此正如
B
的方法(也是成员)可以访问
a
的成员一样,您在
N
中的方法也可以访问。
#include <iostream>
#include <string>

class A {
    friend class B;
    std::string m = "Hello";
};

struct B {
    struct N {
        void f(){
            A a;
            std::cout << a.m << std::endl;
        };
    };
};

int main() {
    B::N().f();
}
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
    };
};