我需要nullable double和int。在C#中我可以使用double?
和int?
,在C ++中我们似乎只有boost::optional
。然而,似乎boost:optional
并不支持很多事情,而且开箱即用#34;例如我can't easily devide variables
这就是为什么我要问在这么简单的情况下使用boost::optional
是否一个好主意?我正在编写延迟关键代码,所以我要彻底选择技术。
如果boost::optional<double>
与原始double + boolean
进行比较,则为:
upd 我意识到我可以使用double + isnan()
。我可以使用nan
代替bool
字段。
答案 0 :(得分:3)
你选择。使用T + bool是:
显着慢了吗?
错误phrone?
不太可读和可维护?
optional<T>
替换unique_ptr<T>
T*
(甚至null
)是微不足道的(因为none
/ bool+T
- 检查使用相同的语法),但是,替换std::vector<bool>
并不简单替代演习。其他问题?
std::vector<T>
+ std::vector<optional<T>>
可能比{{1}}更有效(存储方式);运行时可能会变慢,具体取决于使用模式。 (个人资料,个人资料,个人资料)TL; DR:首先是正确性,稍后优化。
如果你想要提升算术运算,只需要强类型为它设置可选和重载运算符。
答案 1 :(得分:2)
boost::optional
将是我在C ++中采用的正常方法。
似乎可以肯定地说,与double
+ bool
boost::optional
相比,应该更不容易出错且更具可读性。至于性能,唯一可以确定的方法是在用例中分析两种方式,看看哪种方式更快。请记住boost::optional
支持就地构造,我怀疑它提供的功能几乎没有开销。
简要说明你对分词的评论,C ++是一种强类型语言,并且在许多情况下不允许从一种类型到另一种类型的隐式转换。您需要告诉语言您的意图是什么,这样可以让您编写更清晰的代码,甚至可以提高其稳健性。