c++ - 内部类和外部成员的访问

标签 c++ iterator

我有同一个标题的问题here但现在,正如我将在下面的代码中呈现的那样,这似乎与我在具有相同标题的第一个问题中向我解释的方式相反。好的代码:

class LINT_rep
{
private:
    char* my_data_; //stores separately every single digit from a number
public:
    class Iterator:public iterator<bidirectional_operator_tag,char>
        {
private: 
char* myData_
public:
        Iterator(const LINT_rep&);
    };
};

#include "StdAfx.h"
#include "LINT_rep.h"


LINT_rep::Iterator::Iterator(const LINT_rep& owner):myData_(nullptr)
{
    myData_ = owner.my_data_; /*
        HERE I'M ACCESSING my_data WHICH IS PRIVATE AND THIS   
        CODE COMPILES ON VS2010 ULTIMATE BUT IT SHOULDN'T  
        BECAUSE my_data IS PRIVATE AND OTHER CLASS SHOULDN'T  
        HAVE ACCESS TO IT'S PRIVATE MEMB. AS EXPLAINED TO ME IN  
        QUESTION TO WHICH I;VE PROVIDED LINK. */
}

代码中的问题。谢谢。

最佳答案

在即将推出的 C++0x 标准中,嵌套类对封闭类成员的访问权限正在发生变化。在当前标准中,11.8 规定:

The members of a nested class have no special access to members of an enclosing class

在 C++0x 草案中,这更改为

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

一些编译器正在采用新的访问规则;从你的问题来看,我猜VS2010是这样做的,而且根据经验我知道GCC已经这样做了一段时间了。

关于c++ - 内部类和外部成员的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2881305/

相关文章:

java - JNI : Overhead of holding Java object references within the native code?

C++ - vector 初始化失败

带内存的迭代器?

java - 使用 Iterable 的类的多个迭代器

Python - NLP - 将 iter(iter(tree)) 转换为 list(tree)

c++ - 创建随机迭代器(排列)

java - 对于 .next() 在 Java 迭代器中如何在不使用 for 循环的情况下工作感到困惑

c++ - 如何验证另一个程序的窗口是否最小化?

c++ - 如何将 Qt 集成到现有的 C++ 项目中

c++ - 在 C++ 中使用位运算符还是使用 if 语句更快?