Skip to content

Commit dd9230e

Browse files
committed
微修正
1 parent c4b15ea commit dd9230e

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

lang/cpp23/simpler_implicit_move.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ auto f10(J x) -> Widget& {
299299
300300
## この機能が必要になった背景・経緯
301301
302-
C++20までは戻り値型が参照型である場合に暗黙ムーブが行われていなかった。より正確には、関数戻り値の初期化時に戻り値構築のためのコンストラクタを選択するオーバーロード解決が行われる場合にのみ、暗黙ムーブが考慮されていたが、戻り値型が参照型の場合は参照の初期化だけが起こりコンストラクタ呼び出しは関与しないため暗黙ムーブは考慮されていなかった。
302+
C++20までは戻り値型が参照型である場合に暗黙ムーブが行われていなかった。より正確には、関数戻り値の初期化時に初期化のためのコンストラクタを選択するオーバーロード解決が行われる場合にのみ、暗黙ムーブが考慮されていたが、戻り値型が参照型の場合は参照の初期化だけが起こりコンストラクタ呼び出しは関与しないため暗黙ムーブは考慮されていなかった。
303303
304304
これによって、同じ`return`文でも戻り値型が異なることでそのオペランドの扱いが変化してしまっていた。
305305
@@ -318,9 +318,7 @@ auto g(Widget&& w) -> Widget&& {
318318

319319
この非一貫性を解消することがまず求められていた。
320320

321-
また、C++20時点の暗黙ムーブの使用は二段階のオーバーロード解決を行う複雑なものであり、暗黙ムーブが行われるかどうかについて実装間で挙動に差異が生じていた。
322-
323-
C++20の仕様は次のようになっていた。
321+
また、C++20時点の暗黙ムーブの使用は二段階のオーバーロード解決を行う複雑なものであり、暗黙ムーブが行われるかどうかについて実装間で挙動に差異が生じていた。C++20時点の暗黙ムーブの仕様は次のようになっていた
324322

325323
暗黙ムーブ可能なエンティティが次のコピー初期化が行われる場所で指名されている場合、コピーの代わりにムーブが使用される場合がある
326324

@@ -334,9 +332,9 @@ C++20の仕様は次のようになっていた。
334332
1. オペランドのid式を右辺値(*rvalue*)としてオーバーロード解決を実行する
335333
2. 1が失敗した(もしくは行われなかった)場合、オペランドのid式を左辺値(*lvalue*)としてオーバーロード解決を実行する
336334

337-
この最後の手順の1回目のオーバーロード解決時にコピーコンストラクタの代わりにムーブコンストラクタが選択されることによって、C++20の暗黙ムーブは達成されていた。しかし、この手順2における「失敗」という言葉の意味が明確ではなく、それによって実装間で暗黙ムーブが行われるかどうか、あるいは選択されるコンストラクタに差異が生じていた。
335+
この最後の手順の1回目のオーバーロード解決時にコピーコンストラクタの代わりにムーブコンストラクタが選択されることによって、C++20の暗黙ムーブは実行される。しかし、この手順における「失敗」という言葉の意味が明確ではなく、それによって実装間で暗黙ムーブが行われるかどうか、あるいは選択されるコンストラクタに差異が生じていた。
338336

339-
`return`文オペランドの扱いの戻り値型の違いによる非一貫性と、使用の複雑さと曖昧さによる実装間の差異の2つの問題を解決するために、C++23ではムーブする資格がある式という概念を用いて暗黙ムーブの仕様が単純化された。
337+
`return`文オペランドの扱いの戻り値型の違いによる非一貫性と、仕様の複雑さと曖昧さによる実装間の差異の2つの問題を解決するために、C++23ではムーブする資格がある式という概念を用いて暗黙ムーブの仕様が単純化された。
340338

341339
## 参照
342340

0 commit comments

Comments
 (0)