使用選項表示缺少值
在 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;
}
}