返回 void 或对自我的引用

Return void or reference to self?

本文关键字:我的 引用 自我 void 返回      更新时间:2023-10-16

给定以下类:

struct Object {
    int x, y;
    void addtoall( int value ){ x += value; y += value; };
    Object& addtoall( int value ){ x += value; y += value; return *this; };
};

两个成员函数之间有什么区别?

我知道某些运算符重载

(例如:operator+=)需要返回对self的引用,但不包括运算符重载,有必要吗?如果没有,你什么时候想要或需要返回对自我的引用,而不是返回 void?

如果这可以通过google-fu找到,或者是一个非常基本的问题,我深表歉意,但我不确定究竟要搜索什么(而不是因为缺乏尝试)。

两个成员函数之间有什么区别?

返回对实例的引用的函数可以在调用时链接,例如

Object o;
o.addtoall(5).addtoall(6).addtoall(7);

这是否有用取决于实际用例,但它通常用于开发所谓的领域特定语言语法。

我知道某些运算符重载需要返回对 self 的引用(例如:运算符+=)

不,不是。许多人(包括我自己)主张这样的运算符应该被声明为返回void,最明显的是operator=,其链接(或表达式重用)实际上在绝大多数情况下掩盖了代码。我们这样做只是为了(不幸的)惯例。

什么是链接?确切地说,返回此类引用的目的是允许:

std::string{"asdf"}.append(c1).append(c2)

不出所料,append string&回归。虽然对string有点用(append({c1, c2})更简洁),但在大多数其他情况下(例如您的,我们可以只添加两个int而不是调用该方法两次)毫无意义。

相关文章: