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

rah*_*man 1 c++

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

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

void foo(A &a)
{

}
Run Code Online (Sandbox Code Playgroud)

谢谢

Fil*_*efp 6

只要void Foo(A&)(向前)宣布,这样A::bar知道它的存在是完全有效的,并100%允许的.


笔记

  • 有没有我可能不会取消引用的地方this

    不是真的,但是你应该知道一些问题.如果您想使用*this在施工对象的初始化列表请记住,你是不是被允许访问虚拟初始化通过它那个对象的成员; 既不直接也不间接.

  • 如果声明了member-function,const则只允许使用dereferenced -pointer 调用带有const(reference)函数this,请参阅下面的示例.

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

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

  void bar () {
    func (*this);
  }
};
Run Code Online (Sandbox Code Playgroud)

int
main (int argc, char *argv[])
{
  Obj       a;  
  Obj const b;

  a.bar (); /* func (Obj &) */
  b.bar (); /* func (Obj const&) */
}
Run Code Online (Sandbox Code Playgroud)