从 C++ 中的函数返回此值
returning this from function in c++
我最近看到一个关于堆栈溢出的问题,如何从函数中获取派生对象, 有人建议创建本地对象并从函数返回副本。如何从函数中返回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
可能是有效的选择,具体取决于包装类。
相关文章:
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 接收和返回函数指针的函数指针的类型?
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- C++函数链返回函数
- 返回函数指针的函数的签名
- 由于值返回函数中的错误,程序无法编译.它说未声明的标识符
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 如何在 C++ 中从 void 返回函数访问变量
- 返回函数中带有 2 个可选 ctor 的对象
- 如何在 c++ 中返回函数的结构向量
- 返回 C++ 函数中的引用
- 使用向量时,当返回函数更改时,无法看到输出
- 如何在递归中使用返回函数
- 返回函数模板的类型C++作为第二个模板参数
- 为什么静态指针返回函数中有一个"静态"键?
- 递归返回函数,在特殊情况下不返回
- 从类返回函数
- 从类成员函数返回函数指针
- 从返回函数中推断不存在的模板参数