首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >私有类型定义的公共使用是可移植的吗?

私有类型定义的公共使用是可移植的吗?
EN

Stack Overflow用户
提问于 2011-12-03 16:48:20
回答 1查看 4.3K关注 0票数 18
class Settings
{
private:
    typedef std::map<std::string, SettingsOption> OptionMap;

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

    ...
};

这个代码是可移植的吗?关于它的标准说明了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-03 16:55:38

它是合法的,并且Settings类的所有用户都可以访问Settings::iteratorSettings::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备注]

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8366584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档