在c++核心指南中,std::optional
只被引用一次:
如果需要可选值的概念,可以使用指针、std::optional或用于表示"无值"的特殊值。
除此之外,在指南中没有提到它,所以在表达可选值的意图时,特别不建议使用它来代替指针。
与在非多态上下文中可能为空的指针相比,使用std::optional
有任何缺点吗?
因此std::optional
仅被称为旁注,并且是指针的第二个选项。对我来说,std::optional
似乎更有表现力。当使用指针时,您永远无法真正确定是否有意使用nullptr
选项。
这个准则并不是按照"选择这个第一个"的顺序列出事情。它列出了在不同情况下适合的选项,并让你自己决定哪一个最适合你的情况。
特别是,在(const
)T*
和std::optional<T>
之间进行选择与在(const
)T&
和T
之间进行选择是相同的。改编封闭规则的示例,您将拥有
// optional<int> is cheap to copy, pass by value
optional<int> multiply(int, optional<int>);
// suffix is optional and input-only but not as cheap as an int, pass by const*
string& concatenate(string&, const string* suffix);
旁白:如果您遵循其他准则,那么可以确保指针指示";无值"的情况。