有两种看待这一点的方法——优化角度,以及这个声明的逻辑。哪个更重要由您决定。
优化
编辑:我做了一些不正确的假设。似乎编译器实际上并不能自由地进行下面的优化,并且只会通过分析方法的主体来确保没有修改发生(即使这样也只是在简单的情况下)。
拥有这const
将允许编译器进行更多优化。它知道regWrite
不会更改对象中的任何字段,因此如果将它们存储在寄存器中,它可以保留它们,并进行类似的优化,依赖于对象字段不被更改。
当您进行这样的定义时,这确实是编译器唯一依赖的东西,因此拥有它const
是可以的,并且理论上可以提供更好的性能。
合乎逻辑
const
拥有一种其全部目的是破坏性改变的方法感觉不直观。程序员通常的直觉是,只要我只调用 const 方法,其他const
方法的结果就不会改变。如果你违反了这个不成文的合同,预计人们会感到惊讶——即使编译器可以接受。
我不确定这是否会在这里被违反——这将取决于这个类中的其他代码。但是,如果没有其他重要的考虑因素(性能等),const
(对我来说)主要是界面上的一个标记,上面写着“调用它不会改变这个对象的状态”,对于“状态”的广义定义。
然而,这是一个模糊的领域,你认为什么是状态变化取决于你。如果你认为你的固件对象代表一个到内部的链接,那么写一个寄存器不会改变这个链接的任何内容并且是 const 的。如果您认为它代表底层寄存器的状态,那么写入寄存器就是状态的变化。