gpt4 book ai didi

c++ - C++中运算符重载的返回值

转载 作者:IT老高 更新时间:2023-10-28 13:59:51 25 4
gpt4 key购买 nike

我有一个关于 C++ 中运算符重载的返回值的问题。一般来说,我发现了两种情况,一种是按值返回,一种是按引用返回。那么它的底层规则是什么?尤其是在可以连续使用运算符的情况下,如cout<<x<<y .

例如,当实现一个 + 操作“string + (string)”。您将如何通过 ref 或 val 返回返回值。

最佳答案

有些运算符按值返回,有些按引用返回。一般情况下,结果为新值的运算符(如+、-等)必须按值返回新值,结果为现有值但经过修改的运算符(如<<、>>、+ =、-= 等),应返回对修改后值的引用。

例如,coutstd::ostream , 向流中插入数据是一种修改操作,所以要实现 <<运算符插入到 ostream ,运算符定义如下:

std::ostream& operator<< (std::ostream& lhs, const MyType& rhs)
{
// Do whatever to put the contents of the rhs object into the lhs stream
return lhs;
}

这样,当你有一个像 cout << x << y 这样的复合语句时, 子表达式 cout << x首先计算,然后是表达式 [result of cout << x ] << y被评估。由于运营商<<x返回对 cout 的引用, 表达式 [result of cout << x ] << y相当于 cout << y ,正如预期的那样。

相反,对于“字符串 + 字符串”,结果是一个新字符串(两个原始字符串都未更改),因此它必须按值返回(否则您将返回对临时的引用,这是未定义的行为)。

关于c++ - C++中运算符重载的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2337213/

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