[解決済み] C++のクラスメンバは、明示的に初期化しない場合、どのように初期化されるのですか?
質問
プライベートメンバーを持つクラスがあるとします。
ptr
,
name
,
pname
,
rname
,
crname
と
age
自分で初期化しない場合はどうなるのですか?以下はその一例です。
class Example {
private:
int *ptr;
string name;
string *pname;
string &rname;
const string &crname;
int age;
public:
Example() {}
};
そして、そうする。
int main() {
Example ex;
}
exでは、メンバーはどのように初期化されるのですか?ポインターの場合はどうなるのですか?する
string
と
int
デフォルトコンストラクタで0初期化される
string()
と
int()
? 参照メンバはどうする?また、constリファレンスについてはどうでしょうか?
より良い(バグのない)プログラムを書けるように、勉強したいと思います。何かフィードバックがあれば助かります
どのように解決するのですか?
明示的な初期化の代わりに、クラス内のメンバの初期化は、関数内のローカル変数の初期化と同じように動作します。
については
オブジェクト
の場合、そのデフォルトコンストラクタが呼び出されます。例えば
std::string
の場合、デフォルトコンストラクタはこれを空文字列に設定します。オブジェクトのクラスにデフォルトコンストラクタがない場合、明示的に初期化しないとコンパイルエラーになります。
については プリミティブ型 (ポインタ、ints など) の場合、それらは ない 初期化され、以前そのメモリ位置にあった任意のジャンクが格納されます。
については
リファレンス
(例
std::string&
) の場合、それは
違法
を初期化しないと、コンパイラは文句を言って、そのようなコードのコンパイルを拒否します。参照は常に初期化されなければなりません。
つまり、あなたの具体的なケースでは、明示的に初期化されていない場合。
int *ptr; // Contains junk
string name; // Empty string
string *pname; // Contains junk
string &rname; // Compile error
const string &crname; // Compile error
int age; // Contains junk
関連
-
[解決済み] テスト
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] C++で静的プライベートメンバを初期化する方法は?
-
[解決済み】C++におけるstaticキーワードとその様々な使用法
-
[解決済み] C++の静的コンストラクタ?プライベートな静的オブジェクトを初期化する必要があります
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】テンプレートの引数1が無効です(Code::Blocks Win Vista) - テンプレートは使いません。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] C++のPOD型とは何ですか?