回答編集履歴
1
コメントに対する説明を追記
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
|
+
```
|