teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コメントに対する説明を追記

2021/02/12 21:25

投稿

actorbug
actorbug

スコア2515

answer CHANGED
@@ -40,4 +40,22 @@
40
40
  新たなX型の一時オブジェクトを作成し、デフォルトコンストラクタを呼び出し、
41
41
  その直後に一時オブジェクトを開放するという動きになる。
42
42
 
43
- デフォルトコンストラクタで作成された一時オブジェクトの`i`は-1なので-1が出力される。
43
+ デフォルトコンストラクタで作成された一時オブジェクトの`i`は-1なので-1が出力される。
44
+
45
+ ---
46
+
47
+ 追記(1.のカッコ内の説明)
48
+
49
+ 初期化が個別のメンバ変数ごとに独立していれば、初期化子で共通処理関数を呼び出せる。
50
+ この場合は、デフォルトコンストラクタが呼ばれないため、
51
+ 2.で説明するパフォーマンス阻害は発生しない。
52
+
53
+ ```C++
54
+ class Test3 {
55
+ std::vector<int> v;
56
+ static std::vector<int> calc(int n) { return { n, 2, 3 }; }
57
+ public:
58
+ Test3() : v(calc(1)) {}
59
+ Test3(int n) : v(calc(n)) {}
60
+ };
61
+ ```