我有这个C++代码:
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int main() {
vector<int64_t> vec = {4294967296, 4294967296, 4294967296};
int64_t sum = accumulate(vec.begin(), vec.end(), 0, [](int64_t sum, int64_t val){
return sum + val;
});
cout << "sum = " << sum << endl;
}
Run Code Online (Sandbox Code Playgroud)
它返回sum = 0是因为隐式转换int为int64(参见函数的0第三个参数accumulate).更换0后的(int64_t)0一切工作正常.
但是我可以在编译时检测到这些东西吗?-Wconversion在这种情况下不起作用.