使用选项表示缺少值
在 C++ 17 之前,使用值为 nullptr
的指针通常表示没有值。对于已动态分配且已由指针管理的大型对象,这是一个很好的解决方案。但是,这种解决方案不适用于像 int
这样的小型或原始类型,它们很少被指针动态分配或管理。std::optional
为这个常见问题提供了可行的解决方案。
在这个例子中,定义了 struct Person
。一个人有可能有宠物,但不是必需的。因此,Person
的 pet
成员用 std::optional
包装器声明。
#include <iostream>
#include <optional>
#include <string>
struct Animal {
std::string name;
};
struct Person {
std::string name;
std::optional<Animal> pet;
};
int main() {
Person person;
person.name = "John";
if (person.pet) {
std::cout << person.name << "'s pet's name is " <<
person.pet->name << std::endl;
}
else {
std::cout << person.name << " is alone." << std::endl;
}
}