std::move なしで std::unique_ptr を返すことが許可される理由
std::unique_ptr はコピー構築を禁止していますが、return ステートメントにはunique_pts は除外されます。この動作は、C 言語仕様、特に 12.8 §34 および §35 に準拠しています。
特定の条件が満たされる場合、実装はクラス オブジェクトのコピー/移動構造を省略できます。コピー省略として知られるこの最適化は、関数内のクラスの戻り値の型の return ステートメントで許可されます。この例外は、型が関数の戻り値の型と一致する不揮発性自動オブジェクトを含む式に適用されます。
さらに、左辺値オブジェクトに対してコピー省略が発生すると、コピー コンストラクターのオーバーロード解決は、そのオブジェクトが指定されているかのように処理されます。
コンパイラの実装
この例外は次のとおりです。コンパイラ内で処理されます。コンパイラは言語仕様を活用して省略技術を認識して適用し、不要な操作を排除してコードを最適化します。
名前付き値の戻り値
値による戻りが最適なオプションであることは注目に値します。そのようなシナリオ。省略しない場合でも、return ステートメント内の名前付き値は右辺値として処理され、最小限のオーバーヘッドが発生します。
以上が`std::move` を使わずに `std::unique_ptr` を返せるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。