gpt4 book ai didi

c++ - 赋值运算符 "screwing up"的后果是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:25 29 4
gpt4 key购买 nike

我想要具有名称和单位的 double 值,但我想像使用简单 double 值一样使用它们。例如我想像这样使用它们:

int main(){
NamedValue a("a","m");
NamedValue b("b","m");
NamedValue c("c","m^2");
a = 3;
b = 5;
c = a*b;
std::cout << a << b << c << std::endl;
return 0;
}

输出应该是:

a = 3 m
b = 5 m
c = 15 m^2

我想到了这个解决方案:

class NamedValue  {
public:
NamedValue(std::string n,std::string u) : name(n),units(u){}
const std::string name;
const std::string units;
void operator=(double v){this->value = v;}
void operator=(const NamedValue& v){this->value = v.value;}
operator double() const { return value; }
private:
double value;
};

std::ostream& operator<<(std::ostream& stream,const NamedValue& v) {
stream << v.name << " = " << (double)v << " " << v.units << std::endl;
return stream;
}

Unitl 现在运行良好,但我主要关心的是赋值运算符 void operator=(const NamedValue& v){this->value = v.value;} 不完全正确,人们通常对赋值运算符的期望是什么。

我会面临什么不好的后果吗?

我正在考虑将对象作为参数传递之类的事情。然而,像这样的功能

NamedValue test(NamedValue x){return x;}

工作没有问题,因为不涉及赋值(仅复制构造函数)。我错过了什么吗?还有什么我应该注意的吗?

ps:以防万一你想知道,目前我不关心在计算时检查单位。

最佳答案

赋值运算符完全没问题。唯一不寻常的是您没有返回对象,因此无法链接运算符调用。否则,它就是一个完全正常的运算符。

关于c++ - 赋值运算符 "screwing up"的后果是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31449493/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com