为什么允许在没有 std::move 的情况下返回 std::unique_ptr
虽然 std::unique_ptr 禁止复制构造,但是 return 语句具有unique_ptr 除外。此行为符合 C 语言规范,特别是第 12.8 §34 和 §35 条。
当满足特定条件时,实现可能会省略类对象的复制/移动构造。这种优化称为复制省略,允许在函数内类返回类型的返回语句中使用。该异常适用于涉及类型与函数返回类型匹配的非易失性自动对象的表达式。
此外,当左值对象发生复制省略时,复制构造函数的重载解析将继续进行,就像指定了该对象一样由右值。
编译器实现
此异常在编译器内处理。编译器利用语言规范来识别和应用省略技术,通过消除不必要的操作来优化代码。
命名值返回
值得注意的是,按值返回是最佳选择这样的场景。即使没有省略,return 语句中的命名值也会作为右值处理,从而产生最小的开销。
以上是为什么我可以在没有 `std::move` 的情况下返回 `std::unique_ptr` ?的详细内容。更多信息请关注PHP中文网其他相关文章!