回答編集履歴
1
expand answer
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)時点では時間切れでムーブセマンティクスに対応できなかったとのことで、将来的には何らかのサポートがあるかもしれませんね。
|