cpp17的std::optional
时间: 2023-05-31 10:03:43 浏览: 151
std::optional是C++17的新特性之一,它是一个模板类,可以用来表示一个可选的值。它可以用于替代指针或引用类型,以及避免出现空指针的问题。
std::optional类有两种状态:有值状态和无值状态。有值状态表示包含一个值,无值状态表示不包含任何值。可以使用std::nullopt表示无值状态。
使用std::optional非常简单,只需要在声明变量时使用std::optional类型即可,例如:
```cpp
std::optional<int> opt1; // opt1是一个std::optional<int>类型的变量,初始值为无值状态
std::optional<int> opt2 = 42; // opt2是一个std::optional<int>类型的变量,初始值为42
```
可以使用std::optional的成员函数来访问值或检查是否有值,例如:
```cpp
std::optional<int> opt = 42;
if (opt.has_value()) {
std::cout << "opt has value: " << opt.value() << std::endl;
} else {
std::cout << "opt has no value" << std::endl;
}
```
如果std::optional包含一个值,可以通过调用value()函数来获取该值。如果std::optional不包含值,则调用value()函数会抛出std::bad_optional_access异常。因此,在调用value()函数之前,必须先检查std::optional是否包含值。
此外,std::optional还提供了其他一些有用的成员函数,例如reset()函数可以将std::optional重置为无值状态,emplace()函数可以使用构造函数参数来设置std::optional的值。
阅读全文