Я написал очень простой код для добавления чисел в пару с помощью шаблонов с переменными числами.Ожидаемый результат для данного теста должен быть 6, но я вижу 3. Я также пробовал отладку, но ничего не выглядит неправильно.Почему вывод 3, а не 6?
template<typename T>
bool pairwise_sum(const T&first, const T&second)
{
return (first + second);
}
template<typename T, typename... Args>
T pairwise_sum(const T&first, const T&second, Args... args)
{
return (first + second) + pairwise_sum(args...);
}
void test()
{
auto sumInPair = pairwise_sum(1, 1, 2, 2);
}
Также у меня есть еще один вопрос, поскольку весь код генерируется во время компиляции.Будет ли иметь значение приоритет оператора?Например, если функция была чем-то вроде:
template<typename T>
bool pairwise_sum_10fold(const T&first, const T&second)
{
return 10 * ( (first + second));
}
template<typename T, typename... Args>
T pairwise_sum_10fold(const T&first, const T&second, Args... args)
{
return 10 * (first + second) + pairwise_sum_10fold(args...);
}
В этом случае имеет ли значение, помещаю ли я возвращаемое значение в скобки, так как * имеет больший приоритет, чем +?
PS Я использую VSКомпилятор 2017 года.Заранее спасибо.