内部类和访问外部成员

时间:2010-05-21 10:34:22

标签: 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. */
}

代码中的问题。感谢。

2 个答案:

答案 0 :(得分:5)

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

  

嵌套类的成员对封闭类

的成员没有特殊访问权限

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

  

嵌套类是成员,因此具有与任何其他成员相同的访问权限

一些编译器正在采用新的访问规则;从你的问题来看,我想VS2010确实如此,而且我从经验中知道海湾合作委员会已经做了一段时间了。

答案 1 :(得分:1)

根据标准11.8,嵌套类是成员,作为成员,它与其他类成员具有相同的权限,因此它可以访问私有成员。

11.8嵌套类[class.access.nest]
1-嵌套类是成员,因此具有与任何其他成员相同的访问权限。封闭类的成员对嵌套类的成员没有特殊访问权限;应遵守通常的准入规则(第11条)。