c++ - 从低到高的隐式转换

标签 c++ type-conversion implicit

我有以下函数可以找到 4 个数字的最小总和和最大的一个:

void miniMaxSum(vector<int> arr)
{
    std::sort (arr.begin(), arr.end());           //(12 32 45 71)26 80 53 33
    unsigned long long minSum = arr[0] + arr[1] + arr[2] + arr[3];
    unsigned long long maxSum = (unsigned long long) arr[arr.size() - 1] + (unsigned long long) arr[arr.size() - 2] + (unsigned long long) arr[arr.size() - 3];
    cout << arr[arr.size() - 1] << " " << arr[arr.size() - 2] << " " << arr[arr.size() - 3] << " " << arr[arr.size() - 4] << " " << endl;
    cout << minSum << " " << maxSum << endl;
}

现在,如果我省略 (unsigned long long) 转换,我会发生溢出。有谁知道为什么?编译器不应该自动将 int 转换为 unsigned long long 吗?

最佳答案

感谢您的评论! @JeJo 上面给出了答案。更具体地说:

如果我们省略所有 (unsigned long long) 转换,那么加法运算的结果将是一个整数(溢出),随后将转换为 unsigned long long。为防止溢出,我们只需要保留其中一个 (unsigned long long) 强制转换,因为这样一个加法数是 ULL,加法操作的其他部分也将被转换。因此,加法运算的结果将是一个无符号长整数。

关于c++ - 从低到高的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692321/

相关文章:

scala - 将参数标记为隐含在方法中

c++ - 混合函数模板和普通函数

android - 跨原生 GCC 4.8 构建 : libcpp Error: invalid conversion from long long to off_t (aka long int)

c - 指针声明中的错误数据类型

type-conversion - OCaml 中的类型化整型常量

c - 函数的隐式声明?

implicit - J 中默认编程的优缺点

c++ - 故意返回 NaN

c++ - 这个数组交集的实现是如何工作的?

c++ - 为什么不能显示指针的地址?