optional 构造函数
时间: 2024-06-16 22:07:52 浏览: 149
JAVA Optional类用法分享
5星 · 资源好评率100%
optional是C++17中引入的一个类模板,用于表示可能存在或不存在的值。optional类模板提供了多种构造函数,以便在创建optional对象时进行不同的初始化操作。
1. 使用默认构造函数:optional对象可以使用默认构造函数进行构造,此时optional对象内部存储的值为空。例如:
```cpp
std::optional<int> opt; // 使用默认构造函数创建一个空的optional对象
```
2. 使用in_place构造函数:optional对象可以使用in_place构造函数进行构造,并传递参数来初始化内部存储的值。这种方式适用于需要使用多个参数进行构造的情况。例如:
```cpp
std::optional<std::complex<double>> complexOpt(std::in_place, 3.0, 4.0); // 使用in_place构造函数创建一个std::complex<double>类型的optional对象,并传递参数进行初始化
std::optional<std::vector<int>> vectOpt(std::in_place, {1, 2, 3}); // 使用in_place构造函数创建一个std::vector<int>类型的optional对象,并传递参数进行初始化
```
3. 使用make_optional函数:optional对象也可以使用make_optional函数进行构造,并传递参数来初始化内部存储的值。make_optional函数会根据传递的参数类型自动推导optional对象的类型。例如:
```cpp
auto complexOpt = std::make_optional<std::complex<double>>(3.0, 4.0); // 使用make_optional函数创建一个std::complex<double>类型的optional对象,并传递参数进行初始化
auto vectOpt = std::make_optional<std::vector<int>>({1, 2, 3}); // 使用make_optional函数创建一个std::vector<int>类型的optional对象,并传递参数进行初始化
```
optional对象还可以作为函数的返回值,以便在函数中返回可能存在或不存在的值。例如:
```cpp
std::optional<int> getValue(bool condition) {
if (condition) {
return 42; // 返回一个包含值的optional对象
} else {
return std::nullopt; // 返回一个空的optional对象
}
}
```
阅读全文