我一直在使用這個方法沒有任何問題,但我想確保這是一個完全允許的方法,或者我只是幸運!是否允許傳遞* this作爲接受引用(&)的函數的參數?
class A
{
public:
void bar()
{
foo(*this);
}
};
void foo(A &a)
{
}
謝謝
我一直在使用這個方法沒有任何問題,但我想確保這是一個完全允許的方法,或者我只是幸運!是否允許傳遞* this作爲接受引用(&)的函數的參數?
class A
{
public:
void bar()
{
foo(*this);
}
};
void foo(A &a)
{
}
謝謝
只要void Foo(A&)
是(向前)宣佈使A::bar
知道它的存在是完全有效的,並允許100%。
注意
在哪裏有我可以不提領this
?
不是真的,但有幾個問題你應該知道。如果你想在一個施工對象的初始化列表中使用*this
請記住,你是不是允許通過它來訪問虛擬或初始化該對象的成員;既不直接也不間接。
如果成員函數聲明const
僅服用const的(參考)函數被允許使用解除引用this
終場,見下面的例子被調用。
void func (struct Obj&);
void func (struct Obj const&);
struct Obj {
void bar() const {
func (*this);
}
void bar() {
func (*this);
}
};
int
main (int argc, char *argv[])
{
Obj a;
Obj const b;
a.bar(); /* func (Obj &) */
b.bar(); /* func (Obj const&) */
}
是的,這是允許的。需要注意的是,從一個const方法,你可以通過*this
只接受功能參數常量:
class B;
void foo(B&);
void bar(B const&);
class B {
void meow() const {
bar(*this); //OK
foo(*this); //ERROR
}
};
是的,這是完全合法的。這是您在某些運算符(如賦值運算符)中編寫return *this;
時所要做的。
這是非常好的,也是「我希望其他函數或對象知道這個對象」的常見模式。
只要確保引用不會保存超出一個傳入的壽命。
@ REFP,哦,是的,提供了向前聲明。謝謝 – rahman