更改类成员的访问说明符(例如从私有到受保护)是否会影响类的性能(执行速度)?如果是,请解释如何?
答案 0 :(得分:7)
没有。如果是这样,我会认为你的编译器坏了。
通常,编译(非调试)可执行文件不包含有关布局,访问级别甚至类成员类型的信息。这些根本不是执行程序所必需的,因此在通常的“不为你不使用的东西买单”时,它们会完全被剥离,因此不会对性能产生任何影响。
理论上它可能会间接影响优化器,但我怀疑它在实践中是否存在。 - Slava
公平点。在C ++中,访问说明符只是在命名时执行的健全性检查。它总是最后执行(在重载解析,名称查找等之后),并且只有两个结果:命名实体是可访问的,一切都很好,或者编译暂停。它根本无法改变程序的可观察行为。因此,它确实非常奇怪,它对性能有任何影响。
答案 1 :(得分:2)
更改数据成员的访问说明符可能会影响layout。
如果您拥有使用offsetof
的(先前)标准布局类型的用户或公共初始序列,则更改成员访问级别的突然未定义行为允许编译器在消除“死”代码时有大量余地
即使没有它,您可能已经以特别粗略的顺序声明了public
个数据成员,private
一个允许更有利的布局。 (反之亦然)
但是,您可以自由地重新排序您的类成员的声明,这将对您的代码没有其他可观察到的差异。您不应仅为了重新排序而更改成员的访问说明符。