为什么c++核心指南不建议在适当的时候使用std::optional指针?



在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); 

旁白:如果您遵循其他准则,那么可以确保指针指示";无值"的情况。

最新更新