これを見るには、最適化の角度とこの宣言のロジックの2つの方法があります。どちらがより重要かはあなたが決めることです。
最適化
編集:私はいくつかの間違った仮定をしました。コンパイラーは実際には以下の最適化を自由に行うことができないようであり、メソッドの本体を分析して変更が発生しないことを確認することによってのみ最適化を行います(それでも単純な場合のみ)。
これconst
を使用すると、コンパイラーはもう少し最適化できます。オブジェクト内のフィールドは変更されないことがわかっているため、レジスタに格納されている場合はフィールドを保持し、オブジェクトフィールドregWrite
が変更されていないことに依存する同様の最適化を実行できます。
このような定義を作成するときにコンパイラが依存するのはこれだけなので、これを使用してconst
も問題はなく、理論的にはパフォーマンスを向上させることができます。
論理的に意味をなす
const
破壊的な変化を目的とする方法があるのは直感的ではありません。プログラマーが持っている通常の直感は、私がconstメソッドのみを呼び出している限り、他のconst
メソッドの結果は変わらないはずだということです。この書かれていない契約に違反した場合は、コンパイラがそれで問題ないとしても、人々が驚かれると期待してください。
ここでこれに違反するかどうかはわかりません。このクラスの他のコードに依存します。ただし、他の考慮事項(パフォーマンスなど)が重要でない場合は、const
(私にとって)ほとんどの場合、「状態」の広義の定義として、「これを呼び出してもこのオブジェクトの状態は変更されません」というインターフェイス上のマーカーです。
ただし、これは曖昧な状況であり、状態変化をどのように考えるかはあなた次第です。ファームウェアオブジェクトを内部へのリンクを表すものと考える場合、レジスタを書き込んでもこのリンクについては何も変更されず、constです。基礎となるレジスタの状態を表すものと考える場合、レジスタへの書き込みは状態の変化です。