在C++17標準中引入了std::optional類模板,它是一個泛型類模板,可以用來包裝一個值,表示該值可能存在,也可能不存在。
std::optional的用法如下:
std::optional<int> opt1; // 未初始化,值不存在
std::optional<int> opt2 = 42; // 初始化為42
if (opt1.has_value()) {
// 值存在
} else {
// 值不存在
}
if (opt2.has_value()) {
int value = opt2.value(); // 獲取值
// 或者
int value = *opt2; // 通過解引用獲取值
}
int value = opt1.value_or(0); // 如果值存在,獲取值;否則返回默認值0
opt1.reset(); // 重置值,使其不存在
std::optional的使用可以避免使用指針或引用時可能存在的空指針異常,提高了代碼的安全性和可讀性。