向量与boost :: optional <vector>之间的区别作为函数参数,默认值设置为空vs boost :: none?

时间:2017-11-21 22:45:32

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

使用函数将向量默认为空是有区别的:

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

与一个提升可选默认为boost :: none

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

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

1 个答案:

答案 0 :(得分:0)

optional<vector>相比,vector有两个空状态:它可以包含无向量,或者它可以包含一个空的向量< / em>的。暂时搁置效率问题,考虑哪种类型实际反映了您的意图。

通常optional将使用稍多的内存,因为它需要一个额外的字节来指示它是否包含一个对象。设置和检查该标志也需要很少的费用。但是,除非您有证据表明这会对您的应用产生显着的性能差异,否则这并不是优先选择其中之一的原因。