class Settings
{
private:
typedef std::map<std::string, SettingsOption> OptionMap;
public:
typedef OptionMap::iterator iterator;
typedef OptionMap::const_iterator const_iterator;
...
};
这个代码是可移植的吗?关于它的标准说明了什么?
发布于 2011-12-03 16:55:38
它是合法的,并且Settings
类的所有用户都可以访问Settings::iterator
和Settings::const_iterator
。
C++中的访问控制仅应用于名称。在ISO/IEC 14882:201111class.access/4中有一个注释和示例,清楚地表明这是意图。
...注意:由于访问控制适用于名称,因此,如果将访问控制应用于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
}
-end备注]
https://stackoverflow.com/questions/8366584
复制相似问题