我有以下函数,找到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吗?