除其他外,我自己使用const的一个原因是,通过确保值不会发生变化,编译器可以更有效地优化生成的代码。这似乎是合理的(但我也听说过这样做的好处有点小)。
在任何情况下,使用无状态类/对象时都是如此吗?您是否可以合理地期望甚至可以通过标记无状态对象const来获得较小的加速,或者今天的编译器是否足以识别无状态,并且无论其是否标记为const都会对其进行优化?
可以根据具体的编译器或一般的编译器来回答。
答案 0 :(得分:1)
“无状态”对象必须是没有成员变量的对象。 const
方法仅表示隐式this
指针为const
。但是如果你没有成员变量,this
只对调用成员函数很有用,它的const
只会确定调用哪个重载(可能你不会在{{1}上重载成员函数当没有状态变异时)。因此,当没有要修改的状态时,我们不应该期望(但可能仍会发现!)任何优化差异,并且当通过const
调用的所有成员函数(如果它甚至是多态类)将是{{1}时无论如何。
当然,在优化中需要考虑的最重要的事情是您的特定用例,特定的编译器,在您的特定平台上。只有这样才能确定是否有任何重要事项。
答案 1 :(得分:1)
今天的编译器是否足以识别无状态,并对其进行优化,无论其是否标记为常量?
没有什么可以优化的!您没有数据访问权限,因此const
对象100%无意义。