const と non-const の 2 つの get メソッドを持つクラスを作成しました。const メソッドは公開されているため、ユーザーはベクトルを照会できます。非 const メソッドは保護されているため、必要なデータを変更するために使用できます。
ただし、クラスを使用して get メソッドを呼び出そうとすると、コンパイラは非 const メソッドが保護されていると不平を言います。代わりに、const_cast を使用してオブジェクトを const にキャストする必要があるため、代わりに public メソッドを取得できます。
これを解決する方法はありますか?public メソッドがあるのに、なぜコンパイラはキャスト自体を行わないのでしょうか? 保護されたバージョンを削除して const バージョンをそのままにしておくと、正常に動作するため、この状況ではキャストが実行されます。const へのキャストは常に安全です。問題は constness を削除することです。