class Settings
{
private:
typedef std::map<std::string, SettingsOption> OptionMap;
public:
typedef OptionMap::iterator iterator;
typedef OptionMap::const_iterator const_iterator;
...
};
Run Code Online (Sandbox Code Playgroud)
这段代码是否可移植?标准的含义是什么?
CB *_*ley 25
它是合法的,Settings::iterator并且Settings::const_iterator可供Settings班级的所有用户访问.
C++中的访问控制纯粹应用于名称.ISO/IEC 14882:2011 11 [class.access]/4中有一个注释和示例,表明这是意图.
[...] [ 注意:由于访问控制适用于名称,如果将访问控制应用于typedef名称,则仅考虑typedef名称本身的可访问性.不考虑typedef引用的实体的可访问性.例如,
class A {
class B { };
public:
typedef B BB;
};
void f() {
A::BB x; // OK, typedef name A::BB is public
A::B y; // access error, A::B is private
}
Run Code Online (Sandbox Code Playgroud)
- 结束说明 ]
| 归档时间: |
|
| 查看次数: |
4231 次 |
| 最近记录: |