gpt4 book ai didi

c++ - 内部类访问外部类私有(private)成员数据

转载 作者:可可西里 更新时间:2023-11-01 18:21:04 28 4
gpt4 key购买 nike

有这段代码:

#include <iostream>

class Outer{
int a; // private data member of class Outer
public:
Outer(): a(55){}
class Inner{
public:
void fun(Outer ob){
std::cout << ob.a << std::endl;
}
};
};

int main() {

Outer::Inner object;
object.fun(Outer()); // prints 55
//std::cout << (Outer().a) << std::endl; error: 'int Outer::a' is private

return 0;
}

为什么内部类可以访问外部类的私有(private)成员数据'a'?关注本文XL C/C++ V8.0 for Linux ,它不应该编译,但是它在 g++ 4.4.0 上编译。

最佳答案

C++03 标准 $11.8/1:[class.access.nest]

嵌套类的成员对封闭类的成员没有特殊访问权,也没有向封闭类授予友元的类或函数的特殊访问权;应遵守通常的访问规则(第 11 条)。 封闭类的成员对嵌套类的成员没有特殊访问权;应遵守通常的访问规则(第 11 条)。

但这是一个缺陷:

45. Access to nested classes

在 C++11 中,这已得到纠正:在 C++11 中,嵌套类确实可以访问封闭类的私有(private)成员(尽管封闭类仍然无法访问嵌套类的私有(private)成员) .

C++11 标准 11.7 嵌套类:

A nested class is a member and as such has the same access rights as any other member. The members of an enclosing class have no special access to members of a nested class; the usual access rules (Clause 11) shall be obeyed. [

class E {
int x;
class B { };
class I {
B b; // OK:E::I can accessE::B
int y;
void f(E* p, int i) {
p->x = i; // OK:E::I can accessE::x
}
};
int g(I* p) {
return p->y; // error:I::y is private
}
};
—end example]

该示例与您提出的问题相似,它清楚地显示了其有效行为。

关于c++ - 内部类访问外部类私有(private)成员数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869907/

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