gpt4 book ai didi

c++ - C++中的运算符重载

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:38 24 4
gpt4 key购买 nike

如果我想重载运算符+,哪个原型(prototype)是正确的?

  1. D运算符+(const D& lhs, const D& rhs);
    然后将其声明为 D 的友元函数。

  2. D运算符+(const D& s);
    然后声明为D的成员函数。

最佳答案

第一个是正确的,第二个是完全错误的。你可以通过写这个来改进第二个

D operator+(const D& s) const;

但还是错了。原因是编译器将在第二个版本中对 + 运算符的左右两侧应用不同的规则。例如给出这段代码

class C
{
};

class D
{
public:
D(const C&);
};

C c;
D d;

d = d + c; // legal with both versions
d = c + d; // not legal with the second version

不同之处在于,编译器将从 C 对象创建临时 D 对象作为方法或函数参数,但不会对临时对象进行方法调用。

简而言之,第一个版本平等对待左侧和右侧,因此更符合编码人员的期望。

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

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