加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C成员与非成员操作符

发布时间:2020-12-16 09:46:42 所属栏目:百科 来源:网络整理
导读:我看到了两种不同的方法来实现运算符. 在标准库中,std :: complex,operator被实现为非成员函数.在工作中使用的Vector2类中,作为成员函数实现.据我所知,std :: complex和Vector2之间在添加方面没有概念上的区别. 在实现Vector2类时,有没有理由不使用标准库方
我看到了两种不同的方法来实现运算符.

在标准库中,std :: complex,operator被实现为非成员函数.在工作中使用的Vector2类中,作为成员函数实现.据我所知,std :: complex和Vector2之间在添加方面没有概念上的区别.

在实现Vector2类时,有没有理由不使用标准库方法?使用一种方法或另一种方法或仅仅是个人偏好的问题是一些真正的优势吗?

注意:Vector2中的x和y成员是公共的

解决方法

它有一个非常强大的理由成为非成员函数:表达式的LHS和RHS之间的对称性.在std :: complex的情况下,它可以从标量类型(int,double等)隐式转换,因此如果运算符是成员,则以下内容将不起作用:

std::complex<double> c1;
std::complex c2<double> = 5.0 + c1;

而以下是:

std::complex c2<double> = c1 + 5.0;

这种不一致没有多大意义.非成员二元运算符允许进行隐式转换.

注意:根据我对数学向量类型的经验,通常需要提供涉及其他向量类型的算术运算符:

template <typename V>
Vector2 operator+(const Vector2& lhs,const V& rhs)
{
  Vector2 ret = lhs;
  ret += rhs;  // uses member function template operator +=(const V&)
  return ret;
}

template <typename V>
Vector2 operator+(const V& lhs,const Vector2& rhs)
{
  return rhs + lhs;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读