我一直在使用这种方法没有任何问题,但我想确定这是一个完全允许的方法还是我只是幸运!
class A
{
public:
void bar()
{
foo(*this);
}
};
void foo(A &a)
{
}
Run Code Online (Sandbox Code Playgroud)
谢谢
只要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)