class Settings
{
private:
    typedef std::map<std::string, SettingsOption> OptionMap;

public:
    typedef OptionMap::iterator iterator;
    typedef OptionMap::const_iterator const_iterator;

    ...
};

此代码可移植吗?标准对此有何规定?

最佳答案

这是合法的,Settings::iterator类的所有用户都可以访问Settings::const_iteratorSettings

C++中的访问控制仅应用于名称。 ISO/IEC 14882:2011 11 [class.access]/4中有一个注释和示例,可以清楚地表明这是意图。


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
}

关于c++ - 私有(private)typedef的公共(public)用法可移植吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8366584/

10-11 23:08
查看更多