【发布时间】:2020-01-03 08:59:13
【问题描述】:
使用此代码:
static unsigned count = 0;
template<typename... T>
auto sum(T... args)
{
++count;
return (... + args);
}
int main (void)
{
std::cout << sum(12, 32, 32, 12, 4, 3, 43, 432) << std::endl;
std::cout << "TIME: " << count << std::endl;
}
输出是:
$> ./program.out
570
TIME: 1
为什么count 等于1?我预计count 是8。sum 模板函数是否只调用一次?
【问题讨论】:
-
是的,你只调用一次函数;在计算函数调用的次数时,参数的数量并不重要
-
你的 sum 函数必须调用自己才能递归 - 它没有。
-
您能详细说明您期望它是 8 的逻辑吗?明显的期望是 1。
-
表达式被转化为一系列加法语句,而不是递归调用
-
@GhasemRamezani 为什么? sum 的主体确实无处调用 sum。
标签: c++ templates c++17 variadic-templates