#include <iostream>
using namespace std;
int main() {
int m = 1000000000;
int len = 2000000000;
size_t rst = 3000000000;
size_t tt = m*(len-m);
cout << tt <<endl;
cout << rst*1.0/(m*(len-m));
cout << rst*1.0/tt <<endl;
return 0;
}
第10行,m*(len-m)已经超过int的范围,但是结果是size_t,所以会自动推导为size_t
第12行,对于(m*(len-m))而言,只能推导出结果是int,所以就溢出了,即使前面有一个rst是size_t也不能影响推导
| template<typename InputIterator > | |
| thrust::iterator_traits < InputIterator >::value_type | reduce (InputIterator first, InputIterator last) |
int8_t * first;
int8_t* last = first + len;
size_t rst = reduce(first, last)
如果结果大于128,那么就会出错,因为模板的输出类型和输入类型是同一种类型,在函数内部就是用的int8_t, 即使结果是size_t类型的,在传给结果之前int8_t已经溢出了
C++模板函数与数据类型自动推导解析
424

被折叠的 条评论
为什么被折叠?



