本文共 558 字,大约阅读时间需要 1 分钟。
#includeusing namespace std;int main() { int m = 1000000000; int len = 2000000000; size_t rst = 3000000000; size_t tt = m*(len-m); cout << tt <
第10行,m*(len-m)已经超过int的范围,但是结果是size_t,所以会自动推导为size_t
第12行,对于(m*(len-m))而言,只能推导出结果是int,所以就溢出了,即使前面有一个rst是size_t也不能影响推导
template<typename InputIterator > | |
< InputIterator >::value_type | (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已经溢出了
转载地址:http://yyeti.baihongyu.com/