类实例持有对自身的引用 - self
Class Instances holding a reference to themselves - self
我最近一直在学习C++,我一直在尝试坚持使用this->显式引用成员函数和成员变量的风格。
但是,我有一个想法,并开发了一个小类来测试它:
class foo {
public:
foo();
size_t get_val() const;
void set_val(const size_t p);
private:
foo& self;
size_t val;
};
foo::foo() : self(*this), val(0) {}
size_t foo::get_val() const { return self.val; }
void foo::set_val(const size_t p) { self.val = p; }
您可以在其中使用 self.bar 而不是 this->bar。
它编译得很好,我创建了一些实例并稍微玩了一下,它似乎工作正常(至少据我所知),但我只是想知道,对于非平凡的类,这种定义是否会导致问题。
作为旁注,我确实意识到没有真正的理由这样做。 this->bar 实际上只长一个字符,并且不需要构造函数中的其他数据成员。我只是对这样做感到好奇。因此,就此问题而言,"毫无意义"并不真正算作问题。
一个问题:它使每个对象都变大了一个引用的大小。编译器无法优化不存在的成员。
我想你实际上可以使用这样的宏
#define SELF (*this)
以获得相同的效果,而无需支付尺寸成本。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在默认模板参数中引用 self 类型
- 如何从被传递的对象中通过引用传递 self
- 类实例持有对自身的引用 - self
- 为什么有些类方法返回"*this"(self的对象引用)?
- 为什么通过引用传递self会导致错误的访问
- 无法让 Lua 函数引用"self"
- 如何在声明当前命名空间时引用它?有没有像"self"/"this"这样的词?