我最近一直在学习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实际上只有一个字符长,并且在构造函数中不需要额外的数据成员。我只是好奇这样做。因此,出于这个问题的目的,“毫无意义”并不算是一个问题。
答案 0 :(得分:0)
一个问题:它使每个对象的大小超过一个引用的大小。编译器无法优化成员。
我猜你实际上可以使用像
这样的宏#define SELF (*this)
获得相同的效果,无需支付大小费用。