我有以下代码片段
#include <iostream>
#include <vector>
class Move {
private:
int* data;
public:
void set_data_value(int d) {
*data = d;
}
int get_data_value(){
return *data;
}
Move(int d);
Move(const Move &source);
~Move();
};
Move::Move(int d) {
std::cout << "ctor being called" << std::endl;
data = new int;
*data = d;
}
Move::Move(const Move& source) {
std::cout << "copy ctor being called" << std::endl;
data = new int;
*data = *source.data;
}
Move::~Move() {
std::cout << "deleting Move" << std::endl;
delete data; …Run Code Online (Sandbox Code Playgroud) 菜鸟问题 - 为什么这会导致有符号整数溢出?
我想testNum能容纳这么大的数量吗?
int main(int argc, char* argv[]) {
int a = 500000000;
int b = 5;
uint64_t testNum = a * b;
std::cout << testNum << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下运行时错误
runtime error: signed integer overflow: 500000000 * 5 cannot be represented in type 'int'
Run Code Online (Sandbox Code Playgroud)
我发现有两种解决方法:
uint64_ta * b在like前面插入“类型转换”uint64_t testNum = (uint64_t) a * b;我不确定的是,为什么如果没有解决方法,这段代码就无法工作?