Неожиданный вывод в вариационном шаблоне C ++ 11 - PullRequest
0 голосов
/ 21 мая 2018

Я написал очень простой код для добавления чисел в пару с помощью шаблонов с переменными числами.Ожидаемый результат для данного теста должен быть 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 года.Заранее спасибо.

...