C++ 介绍

示例

可选(也称为Maybe类型)用于表示其内容可能存在或可能不存在的类型。它们作为std::optional类在C ++ 17中实现。例如,一个类型的对象std::optional<int>可能包含一些类型的值int,或者可能不包含任何值。

可选参数通常用于表示可能不存在的值,或者用作无法返回有意义结果的函数的返回类型。

其他可选方法

还有许多其他方法可以解决所解决的问题std::optional,但没有一个是很完整的方法:使用指针,使用哨兵或使用pair<bool, T>。

可选与指针

在某些情况下,我们可以提供指向现有对象的指针或nullptr指示失败。但这仅限于对象已经存在的情况-optional作为一种值类型,也可以用于返回新对象而无需求助于内存分配。

可选vs前哨

常见的习惯用法是使用特殊值来表示该值无意义。对于整数类型或nullptr对于指针,它可以是0或-1 。但是,这减少了有效值的空间(您无法区分有效0和无意义0),并且许多类型对于哨兵值自然没有选择。

可选vs std::pair<bool, T>

另一个常见的习惯用法是提供一对,其中元素之一是bool指示该值是否有意义的指示。

这取决于值类型在错误情况下是默认可构造的,这对于某些类型是不可能的,而对于其他类型则是可能的,但对于其他类型则是不希望的。optional<T>在发生错误的情况下,An不需要构造任何东西。