移动 `std::optional` 时要小心!

主要观点:在使用std::optional时存在一个陷阱,返回*opt会导致复制,浪费时间且值在函数结束时被销毁;简单地移动*opt的值也不可行,会使可选值处于中间状态;解决方案是移动std::optional的值而不是值本身,如auto x = std::move(opt).value();可避免意外访问空或垃圾值。

关键信息:

  • 有一个std::optional<T>,若存在则返回并继续程序,不存在则终止并输出错误。
  • 返回*opt需复制,通常不是期望的,会浪费时间且值在函数结束时被销毁。
  • 简单移动*opt的值会使可选值处于中间状态,可能导致意外情况,如后续仍能判断opt.has_value()为真。
  • 正确的做法是移动std::optional的值,如auto x = std::move(opt).value();

重要细节:

  • 在示例代码中展示了错误的移动方式和正确的移动方式及其效果。
  • 强调了此陷阱可能会让一些开发者遇到问题。
阅读 50
0 条评论