stdmake_optional应给如何使用
std::make_optional是C++17中新增加的一个函数模板,用于创建一个std::optional对象。std::optional是一个C++17中新增加的类模板,用于表示一个可选的值,可以用来代替指针或者null值。
使用std::make_optional的步骤如下:
1.包含
2.调用std::make_optional函数模板,传入待创建的对象的值或者引用,并返回一个std::optional对象。
例如,下面的示例代码创建了一个std::optional
#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的值不同
原文地址: http://www.cveoy.top/t/topic/ciqu 著作权归作者所有。请勿转载和采集!