メンバーは通常、C++ クラスで const であってはなりませんか?
変数が「通常」宣言される方法を無視することをお勧めします。の出現頻度は、宣言しようとしている次の変数がconst
であるかどうかを決定するものではありません。const
メンバーはconst
、プログラムの実行全体を通じて初期化後に値が変更されないはずである必要があります。それ以外の場合、それらはすべきではありませんconst
。これはデータのセマンティック プロパティであり、変数を作成するかどうかを決定するために使用する必要がある唯一の基準const
は、値の変化に関する変数の性質です。
変わるかもしれませんか、それとも変わらないでしょうか? 後者の場合は必ず作ってconst
ください。
これは、内部的に std::string が非 const メンバー変数しか持たないことを意味する必要があります。
いいえ、それを暗示しているわけではありませんが、おそらくstd::string
.
重要なことは、クラスにメンバーがあるだけではないという ことです (もちろん、そこから移動したい場合や、クラスが何らかのリソースをカプセル化している場合)。から移動されたものは変更可能です。const
オブジェクトから移動すると、残るのはスケルトンです。移動コンストラクターまたは移動代入演算子には、この移動元オブジェクトをスケルトンとして「フラグを立てる」方法が必要です。通常、これは、移動された from オブジェクトの「内臓を盗む」プロセス、つまりいくつかのポインターをコピーして null に設定するプロセスから自然に続きます。この方法では、デストラクタと代入演算子はそれらを解放しようとしません。移動元オブジェクトを「ゾンビ」としてフラグを立てるには、明らかに、変更可能なメンバー変数が必要です。
ただし、クラスにメンバーがいることに問題はありません。プログラムのセマンティクスをより明確にし、プログラムがそれを壊す可能性を低くする重要な修飾子です。必要に応じて (つまり、初期化後のプログラムの実行中に A 変数の値が変わらない場合)、それを使用してください。const
const
簡単に言えば、const
メンバー変数は移動コンストラクターまたは移動代入演算子によって変更されません (実際、それらはどの関数によっても変更されません)。繰り返しますが、それは彼らが存在できないという意味ではありません。