是否允许将* this作为接受引用(&)的函数的参数传递?

时间:2013-07-15 10:40:40

标签: c++

我一直在使用这种方法没有任何问题,但我想确定这是一个完全允许的方法还是我只是幸运!

class A
{
public:
    void bar()
    {
        foo(*this);
    }
};

void foo(A &a)
{

}

谢谢

4 个答案:

答案 0 :(得分:6)

只要void Foo(A&) (转发)声明,以便A::bar知道它的存在,它就完全有效且100%允许。


备注

  • 我可以在任何地方取消引用this吗?

    不是真的,但是你应该知道一些问题。如果您想在构建对象的初始化列表中使用*this,请记住您允许访问虚拟未初始化通过它的那个对象的成员;无论是直接还是间接。

  • 如果 member-function 被声明为const,则只允许使用取消引用{{}来调用 const(reference)的函数。 1}} - 指针,见下面的例子。

this

void func (struct Obj&);
void func (struct Obj const&);

struct Obj {
  void bar () const {
    func (*this);
  }

  void bar () {
    func (*this);
  }
};

答案 1 :(得分:4)

是的,这是允许的。请注意,从const方法,您只能将*this传递给接受const参数的函数:

class B;

void foo(B&);
void bar(B const&);

class B {
  void meow() const {
    bar(*this); //OK
    foo(*this); //ERROR
  }
};

答案 2 :(得分:1)

是的,这完全合法。这是您在某些运算符(如赋值运算符)中编写return *this;时所执行的操作。

答案 3 :(得分:1)

这非常好,并且是“我想要一些其他功能或对象来了解这个对象”的常见模式。

确保参考文件的保存时间不会超过传入的参考文件。