回答編集履歴

1

expand answer

2016/05/15 03:01

投稿

yohhoy
yohhoy

スコア6191

test CHANGED
@@ -3,3 +3,21 @@
3
3
 
4
4
 
5
5
  公式ドキュメントにも記載がありますが、Type Erasureを使っているため仮想関数呼び出しコストは存在します。
6
+
7
+
8
+
9
+ ----
10
+
11
+ **追記:** 追加された疑問に回答します。
12
+
13
+
14
+
15
+ > 何故初期化リストではコピー・コンストラクタが必要になるのか
16
+
17
+
18
+
19
+ 初期化リストを受け取る側の[`std::initializer_list<E>`クラステンプレート](http://cpprefjp.github.io/reference/initializer_list.html)では、const修飾された要素型にしかアクセスできないため、C++14現在では要素型`E`にはコピー操作を要求します。
20
+
21
+
22
+
23
+ ただやはり不便ですし必ずしも必須要件でもないため、[N4166: Movable initializer lists](https://ezoeryou.github.io/blog/article/2014-11-05-N4160-N4169.html) で改善提案がされているようです。最新の提案文書(v2)は [P0065R0](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0065r0.pdf) です。提案文書によれば、C++11(旧C++0x)時点では時間切れでムーブセマンティクスに対応できなかったとのことで、将来的には何らかのサポートがあるかもしれませんね。