コンストラクタでのフィールドの初期化 - イニシャライザリストとコンストラクタ本体 [重複].
2023-09-22 09:25:09
質問
c++を使い始めてしばらく経ちますが、以下の違いがよくわかりません。
public : Thing(int _foo, int _bar): member1(_foo), member2(_bar){}
と
public : Thing(int _foo, int _bar){
member1 = _foo;
member2 = _bar;
}
これらは同じことをするような気がしますが、この2つの構文には実用的な違いがあるのでしょうか。また、デフォルトのパラメーターの扱いも異なります。
最初の例には全く慣れていないので、もし私が間違っていたら、申し訳ありません。
どのように解決するのですか?
以下の場合は同じではありません。
member1
と
member2
は非POD(つまり、非
P
無地
O
ld
D
ata
) タイプを使用します。
public : Thing(int _foo, int _bar){
member1 = _foo;
member2 = _bar;
}
は
public : Thing(int _foo, int _bar) : member1(), member2(){
member1 = _foo;
member2 = _bar;
}
というのは、これらはコンストラクタ本体が実行を開始する前に初期化されるため、基本的に 2 回の作業が行われるからです。また、これらのメンバの型にデフォルトのコンストラクタがない場合、あなたのコードは ではなく はコンパイルされません。
関連
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++の余分な資格エラー
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] C++で、あるコンストラクタを別のコンストラクタから呼び出す(コンストラクタ・チェイニングを行う)ことは可能ですか?
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】int a[] = {1,2,}; なぜイニシャライザーリストの最後のカンマは許されるのでしょうか?
-
[解決済み】コンストラクタの初期化リストの評価順序について
-
[解決済み】自作関数を書くときにRの省略機能を使うには?
-
[解決済み] コンストラクタのイニシャライザでメンバ配列を初期化する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] コンストラクタのコロンメンバー(" : ")の変な構文は何ですか?