gpt4 book ai didi

c++ - Wandevoorde&Jossutis 书中带有两个参数的非友元运算符+

转载 作者:行者123 更新时间:2023-11-28 06:36:50 24 4
gpt4 key购买 nike

学习表达式模板

在 Wandevoode 和 Jossutis 的书 Templates, the complete guide 中,18.2.3 The Operators 部分,他们定义了一个带有两个参数的 operator+ 但不是作为 friend 方法。

template <typename T, typename R1, typename R2>
Array<T,A_Add<T,R1,R2> >
operator+ (Array<T,R1> const& a, Array<T,R2> const& b) {
return Array<T,A_Add<T,R1,R2> >
(A_Add<T,R1,R2>(a.rep(),b.rep()));
}

我是初学者,因此对我对 C++ 的了解没有信心。

这个operator+不应该是 friend 吗?

我试过了

class A{
public:
explicit A(int x) : a(x){};

A& operator+(const A& x, const A& y){
A temp{x.a + y.a};
return temp;
};
private:
int a;

};

我得到一个二进制“operator+”参数太多

最佳答案

您的“二进制”operator + 成员函数给您“太多参数”错误,因为它具有三个参数:xy 您指定的,加上隐式的 this 参数。这意味着它实际上需要三个参数,这当然是不可能的。

您可以使成员函数接受一个显式参数和隐式this,但在许多人看来,这些二元运算符(如加法和减法)最好在类之外实现,在与类相同的命名空间,作为带有两个显式参数的自由函数。如果可以公开访问完成操作所需的数据(否则您必须使用 friend,如果确实需要的话也可以),这尤其有效。

关于c++ - Wandevoorde&Jossutis 书中带有两个参数的非友元运算符+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26642734/

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