gpt4 book ai didi

c++ - C++中运算符重载的这些方法的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:54 27 4
gpt4 key购买 nike

#include<iostream>
using namespace std;
class X
{
int i;

public:
X(int a=0) : i(a) {}

friend X operator+ (const X& left,const X&right);

};
X operator+ (const X& left,const X&right) // Method 1
{
return X(left.i + right.i);
}

X operator+ (const X& left,const X&right) // Method 2
{
X temp(left.i + right.i);
return temp;
}

int main()
{
X a(2),b(3),c;

c=a+b;

c.print();
return 0;
}

在此代码中,运算符 + 通过 2 种不同的方法重载。

我的问题是这些方法之间有什么区别,应该认为哪种方法更实用?

最佳答案

我看不到任何编译器会在这两个版本之间生成不同代码的情况。第二个稍微冗长一些,但在这种情况下允许编译器优化掉名义上的额外拷贝,而且我不知道有哪个编译器不会执行该省略。

也就是说,这是一个微优化:编写最清晰的代码,然后将我带到我的最后一点。不要编写这些运算符中的任何一个,而是将惯用版本与 += 结合使用:

X& operator+=(const X&right) { i += right.i; return *this; }
X operator+(X left, const X& right) { return left += right; }

关于c++ - C++中运算符重载的这些方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17155537/

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