刺子 2021-05-23 16:36 采纳率: 100%
浏览 44
已结题

C++重载运算符= 的返回值问题

紫书p124中有这样一个关于高精度计算的代码(节选):

struct bigInteger{
	static const int BASE = 1e8;
	static const int WIDTH = 8;
	vector<int> num;
	bigInteger operator = (const string &str){
		num.clear();
		int len = (str.length()-1)/WIDTH + 1;
		for(int i=0; i<len; i++){
			int end = str.length() - i*WIDTH;
			int start = max(0, end - WIDTH);
			num.push_back(atoi(str.substr(start, end-start).c_str()));
		}
		return *this;
	}
};

这里的 bigInteger operator = (const string &str){...}写成void operator = (const string &str){...}不是更好吗?,尤其是在时间要求十分苛刻的题目里。还是说第二种写法可能会产生一些意外的结果?(然而实际测试中并没有发现问题)

还有一种写法就是bigInteger& operator = (const string &str){...}直接返回结果的引用,这种写法的效率又如何呢?

如果在一道时间要求十分苛刻的题目,我应该选择第几种写法呢?

初次接触运算符重载,小白求教~

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-05-24 09:06
    关注

    如果用void返回类型,就不能使用a=b=c这种方式了。

    本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境