C++ 標準庫沒有直接提供類似于 Python 中 Option
或 Rust 中 Option
的實現
std::unique_ptr
或 std::shared_ptr
。當指針為空時,可以將其視為 “None”,而非空時則表示存在一個值。#include<iostream>
#include<memory>
int main() {
std::unique_ptr<int> optionalInt;
if (optionalInt) {
std::cout << "Value: " << *optionalInt<< std::endl;
} else {
std::cout << "No value"<< std::endl;
}
return 0;
}
std::optional
(C++17 引入):std::optional
是一個可以包含值也可以不包含值的模板類。它可以用來表示一個值可能存在,也可能不存在的情況。#include<iostream>
#include<optional>
int main() {
std::optional<int> optionalInt;
if (optionalInt.has_value()) {
std::cout << "Value: "<< optionalInt.value()<< std::endl;
} else {
std::cout << "No value"<< std::endl;
}
return 0;
}
std::variant
(C++17 引入):std::variant
是一個聯合類型,可以存儲其定義的類型集合中的一個類型的值。可以用它來表示一個值可能是多種類型之一,包括 “無值”(例如 std::monostate
)。#include<iostream>
#include<variant>
int main() {
std::variant<std::monostate, int> optionalInt;
if (std::holds_alternative<int>(optionalInt)) {
std::cout << "Value: "<< std::get<int>(optionalInt)<< std::endl;
} else {
std::cout << "No value"<< std::endl;
}
return 0;
}
這些方法都可以用來表示一個值可能存在,也可能不存在的情況,從而類似于其他語言中的 Option
類型。選擇哪種方法取決于你的具體需求和偏好。在 C++17 及更高版本中,std::optional
通常是最簡單且最直接的選擇。