gpt4 book ai didi

C++ 成员与非成员运算符+

转载 作者:太空狗 更新时间:2023-10-29 20:14:04 25 4
gpt4 key购买 nike

我看到了 2 种不同的方法来实现 operator+

在标准库中,std::complexoperator+被实现为非成员函数。在 Vector2 中,工作中使用的类 operator+ 被实现为成员函数。据我所知,std::complexVector2 在加法方面没有概念上的区别。

在实现 Vector2 类时是否有任何理由不使用标准库方法?使用一种或另一种方法是否有真正的优势,或者只是个人喜好问题?

注意:Vector2 中的xy 成员是公开的

最佳答案

它成为非成员函数有一个非常有力的理由:+ 表达式的 LHS 和 RHS 之间的对称性。在 std::complex 的情况下,它可以从标量类型(intdouble 等)隐式转换,因此以下不会如果运算符(operator)是成员,则工作:

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

而以下将:

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

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

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

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;
}

关于C++ 成员与非成员运算符+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17986751/

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