访问说明符和性能

时间:2018-02-02 15:18:15

标签: c++

更改类成员的访问说明符(例如从私有到受保护)是否会影响类的性能(执行速度)?如果是,请解释如何?

2 个答案:

答案 0 :(得分:7)

没有。如果是这样,我会认为你的编译器坏了。

通常,编译(非调试)可执行文件不包含有关布局,访问级别甚至类成员类型的信息。这些根本不是执行程序所必需的,因此在通常的“不为你不使用的东西买单”时,它们会完全被剥离,因此不会对性能产生任何影响。

  

理论上它可能会间接影响优化器,但我怀疑它在实践中是否存在。 - Slava

公平点。在C ++中,访问说明符只是在命名时执行的健全性检查。它总是最后执行(在重载解析,名称查找等之后),并且只有两个结果:命名实体是可访问的,一切都很好,或者编译暂停。它根本无法改变程序的可观察行为。因此,它确实非常奇怪,它对性能有任何影响。

答案 1 :(得分:2)

更改数据成员的访问说明符可能会影响layout

如果您拥有使用offsetof的(先前)标准布局类型的用户或公共初始序列,则更改成员访问级别的突然未定义行为允许编译器在消除“死”代码时有大量余地

即使没有它,您可能已经以特别粗略的顺序声明了public个数据成员,private一个允许更有利的布局。 (反之亦然)

但是,您可以自由地重新排序您的类成员的声明,这将对您的代码没有其他可观察到的差异。您不应仅为了重新排序而更改成员的访问说明符。