C ++では、メンバー変数を持つクラスのオブジェクトをとして宣言するにconst
は、ユーザー定義のデフォルトコンストラクターが必要です。次のコードはこれを示しています。
class Some {
int value;
};
int main() {
// error: default initialization of an object of const type 'const Some'
// without a user-provided default constructor
const Some some;
return 0;
}
ただし、クラスが所有するメンバー変数が変更可能として修飾されている場合、コンパイラーはエラーを報告しません。参考までに、コマンドを使用してコンパイルしましたclang++ -std=c++17 -stdlib=libc++ helloworld.cpp -o helloworld.out --debug
。この結果はコンパイラのバグによるものなのか、C ++言語で定義された構文によるものなのでしょうか。
class Some {
mutable int value;
};
int main() {
const Some some;
return 0;
}
mutable
はの正反対ですconst
。なぜ同じ効果を期待したのですか?
const
がありません。つまり、オブジェクトを変更できず、初期化されていない値が含まれているため、この種のコードは使用できないため、禁止されています。mutable
キーワードを使用すると、値を後で変更できるため、コードを予測可能な方法で使用できます。