从 C++ 中的函数返回此值

returning this from function in c++

本文关键字:返回 函数 C++      更新时间:2023-10-16

我最近看到一个关于堆栈溢出的问题,如何从函数中获取派生对象, 有人建议创建本地对象并从函数返回副本。如何从函数中返回this

我只想知道,这是好的编码实践吗?

感谢您的帮助和时间。

下面是我的示例代码。

class Base {
public:
virtual ~Base() {}
};
class Derived: public Base 
{
private:
int i;
public:
Derived* func(int e) {
i = e;
return this;
}
int getI() { return i; }
};

你可以像这样使用你的代码

Derived d;
Derived* d_ptr = d.func(123);

写这个似乎更容易(假设一个合适的构造函数(

Derived x(123);
Derived* x_ptr = &x;

但也许你在想别的事情。

Derived d;
Derived* d_ptr = d.func(123);

为什么不d_ptr = &d; 乳清 D.func 返回这个? 使用 D.func 时,用户有 D 的指针,无需再次返回。 可能想在链中使用,如 d.func(1(->func(2(->func(3(

几个运算符用于返回自引用(但不是指针(:

  • 复制/移动分配
  • 预递增/递减
  • operator +=operator -=, ...

主要是为了模仿内置行为。

这允许链接操作:a = b = c = 42;(而不是c = 42; b = c; a = b;(。

(滥用(链接没有必要更具可读性,并且拆分为几个语句可能更清晰。

亲链也将其应用于二传手:

rectangle.set_height(42).set_width(21).set_position(x, y);

关于指针与引用,返回指针通常意味着nullptr是可能的值(否则引用更好(。

可能返回指针的运算符是 (地址(operator&和箭头operator->

默认的行为&已经返回this,所以不需要重载它来返回this

operator->应该在最后返回一个指针;this可能是有效的选择,具体取决于包装类。