使用選項表示缺少值

在 C++ 17 之前,使用值為 nullptr 的指標通常表示沒有值。對於已動態分配且已由指標管理的大型物件,這是一個很好的解決方案。但是,這種解決方案不適用於像 int 這樣的小型或原始型別,它們很少被指標動態分配或管理。std::optional 為這個常見問題提供了可行的解決方案。

在這個例子中,定義了 struct Person。一個人有可能有寵物,但不是必需的。因此,Personpet 成員用 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;
    }
}