在 C++ 中声明可见性/访问的方式有何不同?

Posted

技术标签:

【中文标题】在 C++ 中声明可见性/访问的方式有何不同?【英文标题】:How do the ways to declare visibility/access in C++ differ? 【发布时间】:2012-12-04 23:24:26 【问题描述】:

这可能是一个愚蠢的问题,但是在 C++ 中如何在类中声明访问权限方面,在效率、优化等方面有什么不同吗?

作为一个具体的例子,在类中声明每个属性/方法的可见性与在类中声明可见性(即私有/公共/受保护的)“块”相比,效率更高、效率更低或两者都没有。

例如是下面的代码:

class Foo
  private:
    int member1;
    string member2;
    ...
    Thing memberN;

  public:
    int member2;
    Thing member3;
    ...
    string memberM;

比:更有效:

class Foo
  private:
    int member1;

  private:
    string member2;

  private:
    ...

  private:
    Thing memberN;

  public:
    int member2;

  public:
    Thing member3;

  public:
    ...

  public:
    string memberM;



【问题讨论】:

测试一下。使用计时器和配置文件来检查是否存在差异,或者只是比较两种方法的汇编器输出。 我的理解是,可访问性是一个编译时的概念,并且不会发出代码来强制执行可访问性。例如,可以通过指针访问私有成员(不干净,违反很多事情,但可行)。 【参考方案1】:

都是一样的。访问修饰符供编译器使用,并产生相同的输出二进制代码。

【讨论】:

编译需要多少时间? @thed0ctor 这取决于编译器实现。如果使用多个修饰符而不是一个修饰符,理论上会慢一些,但这完全无关紧要

以上是关于在 C++ 中声明可见性/访问的方式有何不同?的主要内容,如果未能解决你的问题,请参考以下文章

C++:警告:“...”声明的可见性高于其字段“...::<anonymous>”的类型

Koltin——最详细的可见性修饰符详解

在活动中更改列表视图的按钮可见性

c++ 特殊方法可见性

如何在阵列适配器中长按时设置按钮的可见性

可见性:隐藏在不同浏览器上的工作方式不同