[解決済み] なぜ const 型メンバ関数は静的データメンバを変更できるのですか?
2023-05-29 05:18:56
質問
次のような
C++
プログラムでは
静的データメンバ
から
const
関数は正常に動作しています。
class A
{
public:
static int a; // static data member
void set() const
{
a = 10;
}
};
しかし
非静的データメンバ
から
const
関数は動作しません。
class A
{
public:
int a; // non-static data member
void set() const
{
a = 10;
}
};
なぜ
const
メンバー関数が
static
データメンバを変更しますか?
どのように解決するには?
それがルールなのです、以上。そして、それには理由があるのです。
は
const
の修飾子は、メンバ関数にある
mutable
非
static
クラスのメンバ変数です。
合理的な説明として
this
のポインタは
const
修飾されたメンバ関数は
const
型であり
this
は本質的に
インスタンス
というクラスの
static
のメンバはクラスのインスタンスとは関係ありません。を変更するためにインスタンスは必要ありません。
static
メンバを修正するためにインスタンスを必要としません。
A::a = 10;
.
では、最初のケースで
a = 10;
の略記として
A::a = 10;
の省略記法と考え、2番目の場合は
this->a = 10;
の略記だと考えてください。
this
は
const A*
.
関連
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] 静的な HTML ページにファビコンを追加する
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】静的定数文字列(クラスメンバ)
-
[解決済み】クラスデータメンバー "::*" へのポインタ
-
[解決済み] コンストラクタでない静的メンバや静的配列をクラスで初期化できないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】識別子 "string "は未定義?
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】デバッグアサーションに失敗しました