GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing cpprefjp.github.io — ラムダ式のキャプチャが書かれた順に初期化されることを保証 [P3847R1] - cpprefjp C++日本語リファレンス ラムダ式のキャプチャが書かれた順に初期化されることを保証 [P3847R1](C++29)
このページはC++29に採用された言語機能の変更を解説しています。 のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要C++26までの規格では、ラムダ式のキャプチャに対応するクロージャ型のメンバ変数の宣言順は未規定であり、キャプチャの初期化もその未規定の順序で行われていた。そのため、次のようなコードは安全ではなかった。
C++29では、明示的なキャプチャ( この変更は欠陥報告 (DR) として扱われる。主要な処理系はいずれも、もともとキャプチャを書いた順序でメンバ変数を宣言・初期化していたため、以前のバージョンに対しても遡及して適用される。 仕様
例出力
この機能が必要になった背景・経緯クロージャ型のメンバ変数の順序を未規定とする規定は、初期化キャプチャの導入より前に書かれたものであり、主に暗黙的なキャプチャの捕捉順を実装が追跡しなくてよいようにすることを意図していたと考えられる。しかし、この実装の自由がもたらす利点(パディングの最小化など)はクロージャではほとんど問題にならず、実際にこの自由を利用する主要な実装も存在しなかった。むしろ初期化キャプチャは、順序が保証される初期化子付きの宣言と見た目がよく似ているため、順序が未規定であることは利用者にとって特に意外な落とし穴となっていた。 順序を強制する回避策として全キャプチャ対象を 関連項目参照 |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |