gpt4 book ai didi

c++ - 具有自动返回类型参数推导的可变参数模板

转载 作者:行者123 更新时间:2023-12-05 09:32:12 26 4
gpt4 key购买 nike

我实现了简单的代码来将所有数字加在一起,但是当插入一个 float 时,一切都变得很奇怪!

如何分析编译器的行为来推断返回类型?

#include <iostream>

template <typename N>
auto summer(N n)
{
return n;
}

template <typename N, typename... Args>
auto summer(N n, Args... args)
{
return n + summer(args...);
}

int main()
{
printf("add: %d \n", summer(4, 34.1, 13, 14, 15, 22)); // Print 22 ?!??!? return last number.
printf("add: %d \n", summer(4, 34.1, 13, 14, 15, 20)); // Print 20 ?!!?!? return last number.
printf("add: %f \n", summer(4, 34.1, 13, 14, 15, 20)); // It's true 100.1000 ?
}

最佳答案

问题是 summer() 的返回类型是 double,但您使用 %d 打印它。结果类似于运行如下代码:

printf("%d", 100.1);

这是UB(未定义行为)。引自 cpp ref :

If any argument after default conversions is not the type expected by the corresponding conversion specifier, or if there are fewer arguments than required by format, the behavior is undefined.

关于c++ - 具有自动返回类型参数推导的可变参数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68352072/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com