c++ - 使用 std::optional 作为常规指针与使用 has_value() 和 value
问题描述
std::optional
可以使用类似于普通指针的语法访问其值,例如 .
std::optional<string> some_str;
if (some_str)
(*some_str).c_str();
但它也有两个功能,has_value()
提供value()
对其值的访问以及检查该值是否存在。
std::optional<string> some_str;
if (some_str.has_value())
some_str.value().c_str();
我想知道这两者有什么区别是为了?
1. 更冗长
2. 性能?
3. 更好的日志记录和调试?value()
会抛出异常。
解决方案
这里有两个不同的东西。
首先,explicit operator bool() const
与bool has_value() const
. 这些正是同义词。它们的意思完全相同。使用您喜欢的任何一个。
其次,T& value()
与T& operator*()
. 这与vector::at
vs.vector::operator[]
相同。前者没有先决条件 - 它检查并抛出 - 后者有先决条件 - 如果禁用可选项,则它是未定义的行为。
推荐阅读
- flutter - Flutter:即使在设置提供程序后也获得空值
- flutter - Dart Isolate 利用 Timer 周期不会停止
- python - 如何使用 Python 查找值序列
- xml - 使用 Powershell 构建基于 CSV 列表的 XML 文件
- ios - iOS CoreBluetooth scanForPeripherals()不显示设备
- azerothcore - 如何让 azerothcore 模块正常工作
- pycharm - Pycharm 中的 %load_ext rpy2.ipython 给出 SyntaxError
- javascript - 每次我运行我的应用程序时,“无法读取未定义的属性‘原型’”
- javascript - 如何正确模拟模块的方法?
- matlab - Matlab将补丁值转换为顶点值