C++嵌套类访问控制
Contents
一直以来都认为C++类里嵌套的类对于外部类的成员遵循基本的规则,该怎样还是得怎样:如果外部类成员是public的则可以访问,private或者protected则不能访问,想要访问的话只能通过声明友元。然而最近发现却不是如此,考虑下面的代码:
|
|
上面的代码在gcc下是可以通过编译的,无论指定-std=c++03还是c++11,相当于Inner类是Outer类的友元。查了一下资料,发现C++98版本最初的规定不是这样的:
|
|
也就是说按照最初的C++98版本Inner是无法访问Outer的私有成员的,不过,C++标准委员会可能感觉哪里有些不对,提出了一个 defect report 45,推翻了原有的设定,表示嵌套类是外部类的友元:
|
|
C++11以及随后的版本都是按照这个设定,gcc的c++03版本也按照这个设定实现。但有些老的编译器可能并不支持这种写法,想要移植性的话可能需要加上友元的声明,或者直接使用支持C++11以后版本的编译器。
参考资料
Author woody2011
LastMod 2016-12-31