回答編集履歴

1

間違いを修正

2019/06/11 02:00

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -34,4 +34,16 @@
34
34
 
35
35
  微妙な差で2回呼ばれることもありますので、微妙な表現をしてしまいました。
36
36
 
37
- [NRVO/RVO](https://blog.kmc.gr.jp/entry/2014/12/20/231430)が機能するケースではC++17より前は処理系によって1回だけ呼ばれ、[C++17以降では1回が保証される](https://faithandbrave.hateblo.jp/entry/2017/01/24/161342)。NRVO/RVOが機能できないケースでは複数回呼ばれます。
37
+ 所謂[RVO](https://blog.kmc.gr.jp/entry/2014/12/20/231430)が機能するケースではC++17より前は処理系によって1回だけ呼ばれ、[C++17以降では1回が保証される](https://faithandbrave.hateblo.jp/entry/2017/01/24/161342)。NRVO/RVOが機能できないケースでは複数回呼ばれます。
38
+
39
+ YUKI007BKBさんのコードは、NRVOが機能して1回だけのデストラクタ呼び出しになっていますので、C++17でも1回だけ呼び出しが「保証」されるというわけではないようです。
40
+
41
+
42
+
43
+ ---
44
+
45
+ 【alphyaさんの回答を見て修正しました】
46
+
47
+ てっきりNRVOについてもコピー省略が保証されると理解していましが、どうも異なるようです。
48
+
49
+ alphyaさんのリンク先を見るとRVOについてのみ記載されてました。