主要观点:在使用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();。
重要细节:
- 在示例代码中展示了错误的移动方式和正确的移动方式及其效果。
- 强调了此陷阱可能会让一些开发者遇到问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。