C++中this指針什麼情況下是必須要用的?
如題,最好能講下這種情況如果不加this會怎樣。謝謝!
- 重載(複合)賦值運算符通常返回
*this
。 - 把自己作為函數實參。如
auto child = new Node(this);
中,構建函數的形參為父節點的指針。 - 在奇異遞歸模板模式(Curiously recurring template pattern)中,基類把自己向下轉型至派生類。
陳碩:類初始化時 this 指針何時生成,在構造函數中如何確保 this 指針有效?
當你在對象方法里需要明確使用自己的時候。
不加會怎樣?不加this你怎麼顯式地指代自己現在這個對象啊?
實現模板模式(Template Method Pattern)的時候,可以藉助於 template 來實現靜態的多態。請注意如下代碼中 Impl::Foo 中的 static_cast,以及 A、B 兩個派生類的 FooImpl。
template &
class Impl
{
public:
void Foo(void)
{
T *pT = static_cast&
}
};
其實我覺得很多人類成員前面加個 m_ 或是後面加個下劃線,都不如直接寫 this。
額,想到一種情況。。。
你的member里有個變數叫nPapapaNum,你的member函數里也有個變數叫nPapapaNum,這時候你想把局部的nPapapaNum賦值給member的nPapapaNum就要這麼寫了。。。
this-&>nPapapaNum = nPapapaNum;
Capture the current object in lambda:
- [this](...){...} // stored reference of *this, c++11
- [that = *this](...)}{...} // capture by copy, c++14 required
- [*this](...){...} // capture by copy, c++17 required
我說一種情況,在const類成員函數中調用非const類成員函數時,直接調用肯定是不行的,可以先顯示把this轉為非const類指針。然後調用該函數
this這個關鍵字,表達的語義是什麼?
表達的是:在對象方法中,隱含的一個變數,表示該對象的指針。
什麼情況下必須使用?
- 需要明確這個語義、不用就會有混淆的情況下。比如對象方法中有個變數 test,而類也有個欄位命名為test,為了明確使用哪個 test ,需要加上 this。 如果不加,可能會出現編譯錯誤。
- 需要在對象方法中使用對象指針的時候。比如在對象方法中,需要以自身對象實例作為參數實例化一個類的時候。如果不用 this,實例化不了。
一直都在用,類函數沒出現this只是省略性寫法
你一個類繼承了一個類模板,想在子類中調用一個父類的成員函數,但是模板可能特化為沒有這個成員函數,你直接調用可能報錯。這時,用「this-&>成員函數名」來調用可指明你欽定是有這個成員函數的。也可以通過using來強制聲明
推薦閱讀: