いいえ、少なくとも C++ では不可能です。mutable
どちらかまたは非const
機能が必要です。
またconst_cast
、物事を変更するために使用しないでください。const_cast
ed値を変更するconst
と、未定義の動作が発生します。
5.2.11 定数キャスト
7 [ 注: オブジェクトのタイプによっては、const-qualifier73 をキャストする const_cast から生じるポインター、左辺値、またはデータ メンバーへのポインターを介した書き込み操作は、未定義の動作を引き起こす可能性があります(7.1.6.1)。—終わりのメモ]
7.1.6.1 cv 修飾子
4 ミュータブル (7.1.1) と宣言されたクラス メンバーは変更できることを除いて、const オブジェクトの有効期間中 (3.8) に変更を試みると、未定義の動作が発生します。
....
5 別の例
struct X {
mutable int i;
int j;
};
struct Y {
X x;
Y();
};
const Y y;
y.x.i++; // well-formed: mutable member can be modified
y.x.j++; // ill-formed: const-qualified member modified
Y* p = const_cast<Y*>(&y); // cast away const-ness of y
p->x.i = 99; // well-formed: mutable member can be modified
p->x.j = 99; // undefined: modifies a const member
—end example ]