小编Lio*_* An的帖子

为什么复制构造函数被调用两次?

我有以下代码片段

#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)

c++ copy-constructor

2
推荐指数
1
解决办法
66
查看次数

即使分配给 uint64_t 时,乘法期间也会发生有符号整数溢出

菜鸟问题 - 为什么这会导致有符号整数溢出?

我想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)

我发现有两种解决方法:

  1. 将 a 和 b 声明为uint64_t
  2. a * b在like前面插入“类型转换”uint64_t testNum = (uint64_t) a * b;

我不确定的是,为什么如果没有解决方法,这段代码就无法工作?

c++

2
推荐指数
1
解决办法
364
查看次数

标签 统计

c++ ×2

copy-constructor ×1