紫书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){...}直接返回结果的引用,这种写法的效率又如何呢?
如果在一道时间要求十分苛刻的题目,我应该选择第几种写法呢?
初次接触运算符重载,小白求教~