std::make_optional 是 C++17 中新增加的一个函数模板,用于创建一个 std::optional 对象。std::optional 是 C++17 中新增加的类模板,用于表示一个可选的值,可以用来代替指针或者 null 值。

使用 std::make_optional 的步骤如下:

  1. 包含 头文件。

  2. 调用 std::make_optional 函数模板,传入待创建的对象的值或者引用,并返回一个 std::optional 对象。

例如,下面的示例代码创建了一个 std::optional 对象,其值为 10:

#include <optional>
#include <iostream>

int main()
{
    auto optional_int = std::make_optional<int>(10);
    std::cout << optional_int.value() << std::endl; // 输出 10
}

如果要创建一个 std::optional 对象,其值为一个自定义类型的对象,需要满足以下条件:

  1. 自定义类型需要支持拷贝构造函数或者移动构造函数。

  2. 自定义类型需要支持拷贝赋值运算符或者移动赋值运算符。

例如,下面的示例代码创建了一个 std::optionalstd::string 对象,其值为一个 std::string 对象:

#include <optional>
#include <iostream>
#include <string>

int main()
{
    auto optional_string = std::make_optional<std::string>('hello world');
    std::cout << optional_string.value() << std::endl; // 输出 hello world
}

需要注意的是,如果传入的参数是一个表达式,则需要确保该表达式不会在 std::make_optional 函数调用之后被修改或者销毁。例如,下面的示例代码是错误的:

#include <optional>
#include <iostream>

int main()
{
    int x = 10;
    auto optional_int = std::make_optional<int>(x);
    x = 20;
    std::cout << optional_int.value() << std::endl; // 输出 10,而不是 20
}

因为 x 在 std::make_optional 函数调用之后被修改了,导致 optional_int 的值与 x 的值不同。

C++17 中 std::make_optional 的使用指南

原文地址: https://www.cveoy.top/t/topic/nsKn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录