Return 无效或引用自我?
Return void or reference to self?
给出以下 class:
struct Object {
int x, y;
void addtoall( int value ){ x += value; y += value; };
Object& addtoall( int value ){ x += value; y += value; return *this; };
};
这两个成员函数有什么区别?
我知道 return某些运算符重载(例如:operator+=)需要对 self 的引用,但不包括运算符重载,是否有必要?如果不是,您什么时候想要或需要 return 对 self 的引用而不是 returning void?
如果这可以通过 google-fu 找到,或者这是一个非常基本的问题,我深表歉意,但我不确定到底要搜索什么(并不是因为缺乏尝试)。
What is the difference between the two member functions?
返回实例引用的函数可以链式调用时
Object o;
o.addtoall(5).addtoall(6).addtoall(7);
这是否有用取决于实际用例,但它通常用于开发所谓的领域特定语言语法。
I understand that returning a reference to self is required for some operator overloads (e.g: operator+=)
不,不是。许多人(包括我自己)主张此类运算符应声明为 return void
,最值得注意的是 operator=
,其链接(或表达式重用)实际上掩盖了绝大多数代码它被使用的情况。我们这样做只是为了(不幸的)惯例。
什么是链接?正是 returning 此类引用旨在允许:
std::string{"asdf"}.append(c1).append(c2)
append
returns string&
,不出所料。虽然对 string
有点用(append({c1, c2})
更简洁),但在大多数其他情况下毫无意义(例如你的情况,我们可以只添加两个 int
而不是调用该方法两次) .
给出以下 class:
struct Object {
int x, y;
void addtoall( int value ){ x += value; y += value; };
Object& addtoall( int value ){ x += value; y += value; return *this; };
};
这两个成员函数有什么区别?
我知道 return某些运算符重载(例如:operator+=)需要对 self 的引用,但不包括运算符重载,是否有必要?如果不是,您什么时候想要或需要 return 对 self 的引用而不是 returning void?
如果这可以通过 google-fu 找到,或者这是一个非常基本的问题,我深表歉意,但我不确定到底要搜索什么(并不是因为缺乏尝试)。
What is the difference between the two member functions?
返回实例引用的函数可以链式调用时
Object o;
o.addtoall(5).addtoall(6).addtoall(7);
这是否有用取决于实际用例,但它通常用于开发所谓的领域特定语言语法。
I understand that returning a reference to self is required for some operator overloads (e.g: operator+=)
不,不是。许多人(包括我自己)主张此类运算符应声明为 return void
,最值得注意的是 operator=
,其链接(或表达式重用)实际上掩盖了绝大多数代码它被使用的情况。我们这样做只是为了(不幸的)惯例。
什么是链接?正是 returning 此类引用旨在允许:
std::string{"asdf"}.append(c1).append(c2)
append
returns string&
,不出所料。虽然对 string
有点用(append({c1, c2})
更简洁),但在大多数其他情况下毫无意义(例如你的情况,我们可以只添加两个 int
而不是调用该方法两次) .