【发布时间】:2015-10-09 09:47:23
【问题描述】:
我想知道这些选项中的哪一个(如果有)更受青睐。
例如,我正在实现一个带有任意数量参数的 sum 函数。然后是主模板
template <typename T, typename... Ts>
auto sum(T t, Ts... ts)
{
return t + sum(ts...);
}
对于基本情况,我至少可以看到两个选项:
-
基本情况是 sum():
auto sum() { return 0; } -
基本情况是 sum(T):
template <typename T> auto sum(T t) { return t; }
在这种情况下,这两种方法似乎都以相同的方式工作,但通常首选哪一种?
【问题讨论】:
-
我认为第二种情况更好,因为第一种添加了无参数的操作
-
尝试两者并测量。您可能会发现优化后它们最终得到了相同的程序集。
-
我会使用第一个只是因为有一天你可能真的需要在你的其他代码中具有零参数的版本。
-
第二版编译速度会快一点。我宁愿选择至少有 2 个参数的版本,因为 logical 和可能发生在 2 个数字之间。
标签: c++ c++11 variadic-templates c++14 variadic-functions