为什么我们可以在包含boost :: none的boost :: optional <t>上使用Indirection / Dereferencing(*)运算符?</t>

时间:2014-08-26 09:46:10

标签: c++ boost

以下行不会在运行时抛出异常:

    boost::optional<double> dummy(boost::none);
    double testValue = *dummy;

在包含*的{​​{1}}上使用间接运算符(boost::optional)时,为什么boost开发人员决定不抛出?作为参考,我在上面的代码中得到boost::none中的随机值,因为它可能会分配内存的随机部分化部分。

这可能导致无声错误,因为您负责在使用之前检查该值。

1 个答案:

答案 0 :(得分:9)

我能想到2:

  • 一致性 - 基本类型不检查。
  • 速度。解除引用是一个小而快速的操作,因此添加支票会产生大量的开销,按比例。

与数组边界检查的情况相同:很好,但很贵。