我的虚拟功能可以返回单个T
或std::vector<T>
。在这种情况下返回boost::variant<T, std::vector<T>>
是不是一个好主意,或者最好总是返回std::vector<T>
?哪个看起来更好,性能开销最小?返回单个值时使用变量会更快吗?
答案 0 :(得分:5)
除了性能问题,这取决于函数的语义,或者更确切地说取决于返回值。
您是否经常需要在只返回一个T
的情况和多值情况之间区分(代码路径)?或者,在任何一种情况下,一个简单的for(auto t : create_T_orTs()) { ... }
能做正确的事吗?
我的直觉是,前者比后者更不可能,并且因为variant<>
带有句法“价格”,我会使用KISS并使用std::vector<T>
,除非有强烈的语义理由来区分一个和多个值的案例。