【问题标题】:Difference between a vector vs a boost::optional<vector> as function parameter with default value set to empty vs boost::none?向量与 boost::optional<vector> 作为默认值设置为空的函数参数与 boost::none 之间的区别?
【发布时间】:2018-05-05 13:27:59
【问题描述】:

让函数采用默认为空的向量有什么区别:

void foo (const vector<T> & vec = {})

与采用 boost 可选的方法相比,默认为 boost::none

void bar (boost::optional<const vector<T>&> vec = boost::none)

在运行时和内存效率方面?

【问题讨论】:

  • 你不能用一个来代替另一个,它们只是意味着不同的东西

标签: c++ performance c++11 vector boost


【解决方案1】:

optional&lt;vector&gt; 有两种空状态,与vector 的状态相比:它可以包含无向量,也可以包含空向量。暂时搁置效率问题,考虑哪种类型真正反映了您的意图。

通常optional 会使用稍微多一点的内存,因为它需要一个额外的字节来指示它是否包含一个对象。设置和检查该标志的成本也很小。但是,这不是首选其中一个的理由,除非您有证据表明这会导致显着的性能差异,这对您的应用程序很重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 2012-10-12
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多