Java の 'final' と C の 'const': 類似性を超えたニュアンス
C プログラマー向け Java チュートリアルでは、次のように示唆されています。 Java の 'final' キーワードは C の 'const' とほぼ同等ですが、詳しく調べると微妙な違いがわかります。
関数メンバーのセマンティクス
C では、メンバー関数をマークする「const」は、「const」インスタンスで呼び出せることを意味します。 Java にはこの機能がありません。たとえば、C では、「i.foo()」は「const Foo& i」で許可されますが、「i.bar()」は禁止されます。
値の割り当て
Java では、final 変数を一度だけ割り当てることができますが、後で割り当てることができます。これは C では許可されません。たとえば、Java では、「a = 10;」となります。は、「public class Foo { void bar() {final int a;」では有効です。 } }。ただし、C では、このような割り当ては無効です。
メンバー変数
Java と C では、メンバー変数をそれぞれ 'final' または 'const' にすることができます。 Java では、これらの変数はコンストラクターが完了する前に設定する必要がありますが、 C では初期化リストを使用する必要があります。
オーバーライド防止
Java の 'final' キーワードは次のとおりです。メソッドのオーバーライドを防ぐために使用されます。 C (C 11 以前) にはこの機能がありません。 Java では、基本クラスの「public Final void foo() {}」を派生クラスでオーバーライドできません。ただし、C (C 11 以前) では、オーバーライドが可能です。
C 11 Update
C 11 では、Java の Final と同等のセマンティクスを提供するために 'final' が導入されました。 。これにより、クラスとメンバー関数を「final」としてマークし、オーバーライドを防ぐことができます。さらに、'final' はメンバー関数の 'const' と組み合わせることができます。
結論
Java の 'final' と C の 'const' には類似点がありますが、メンバー関数のセマンティクス、値の割り当て、メンバー変数、オーバーライド防止への適用方法には微妙な違いがあります。 C 11 は、「const」を拡張して「final」の概念を含め、この点で Java との整合性を高めました。
以上がJava の `final` と C の `const`: 表面上の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。