2013-07-15 81 views

回答

6

只要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&) */ 
} 
+0

@ REFP,哦,是的,提供了向前聲明。謝謝 – rahman

4

是的,這是允許的。需要注意的是,從一個const方法,你可以通過*this只接受功能參數常量:

class B; 

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

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

是的,這是完全合法的。這是您在某些運算符(如賦值運算符)中編寫return *this;時所要做的。

1

這是非常好的,也是「我希望其他函數或對象知道這個對象」的常見模式。

只要確保引用不會保存超出一個傳入的壽命。

相關問題