使用函数将向量默认为空是有区别的:
void foo (const vector<T> & vec = {})
与一个提升可选默认为boost :: none
void bar (boost::optional<const vector<T>&> vec = boost::none)
在运行时和内存效率方面?
答案 0 :(得分:0)
与optional<vector>
相比,vector
有两个空状态:它可以包含无向量,或者它可以包含一个空的向量< / em>的。暂时搁置效率问题,考虑哪种类型实际反映了您的意图。
通常optional
将使用稍多的内存,因为它需要一个额外的字节来指示它是否包含一个对象。设置和检查该标志也需要很少的费用。但是,除非您有证据表明这会对您的应用产生显着的性能差异,否则这并不是优先选择其中之一的原因。