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

回答編集履歴

2

m

2018/01/30 02:46

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  yohhoyさんの回答が正しいのでそれを見てください。
22
22
 
23
- >この2つですが、今回は特殊な条件に当てはまるので得られる結果は同じとなりますが、C++規格的にはべつのものです。
23
+ > この2つですが、今回は特殊な条件に当てはまるので得られる結果は同じとなりますが、C++規格的にはべつのものです。
24
24
 
25
25
  と言ったのは、例えば
26
26
 

1

m

2018/01/30 02:45

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -12,4 +12,22 @@
12
12
  に丸投げするとして、結論から言うと今回の`RGB`クラスは条件を満たしているのですべての特殊なメンバ関数が自動生成されます。
13
13
 
14
14
  さて、方法1ですが、これはaggregate初期化です。コンストラクタによっては同様の記法でinitizer_listによる初期化とみなされることもあるからややこしい。
15
- 方法2も方法1と同じですが、ただし初期化したオブジェクト(`RGB{1, 5, 6}`)をmoveして初期化しています(自信ない、C++17でRVO強制になったけどこれどう解釈されるんだ?1と完全同一になるのか・・・?)
15
+ 方法2も方法1と同じですが、ただし初期化したオブジェクト(`RGB{1, 5, 6}`)をmoveして初期化しています(自信ない、C++17でRVO強制になったけどこれどう解釈されるんだ?1と完全同一になるのか・・・?)
16
+
17
+ ---
18
+
19
+ 追記
20
+
21
+ yohhoyさんの回答が正しいのでそれを見てください。
22
+
23
+ >この2つですが、今回は特殊な条件に当てはまるので得られる結果は同じとなりますが、C++規格的にはべつのものです。
24
+
25
+ と言ったのは、例えば
26
+
27
+ ```
28
+ std::vector<int> a1 = { 1, 2, 3 };
29
+ std::vector<int> a2 = std::vector<int>{ 1, 2, 3 };
30
+ ```
31
+
32
+ この2つは(C++14までだと)違う挙動だよ、という意味合いの話でした。見かけ上すっごい似ていますよね?
33
+ C++17からはこれも同一の挙動になったはずなので、わかりやすくなった・・・のか?