聲明指向這個對象的優點或理由是什麼?聲明指向* this *對象的優點或原因是什麼?
假設一個對象有一個私有變量「x」。
我經常看到這樣的代碼:
class_name<T> &ma = *this;
ma.x = 1;
,而不是
this->x = 1;
或者也可以簡單
x = 1;
聲明指向這個對象的優點或理由是什麼?聲明指向* this *對象的優點或原因是什麼?
假設一個對象有一個私有變量「x」。
我經常看到這樣的代碼:
class_name<T> &ma = *this;
ma.x = 1;
,而不是
this->x = 1;
或者也可以簡單
x = 1;
當你的類的基類是模板類,在this
指針變爲強制引用基類的任何成員。這就是爲什麼前兩個版本可能出現在這種情況下,而第三個版本會出錯。
前兩個版本是相同的(在它們被修復後 - 見下文),並且只在個人風格上有所區別。
class_name<T>& ma = *this;
ma.x = 1;
ma.y = 2;
VS
this->x = 1;
this->y = 2;
由於@克里斯指出,你的第二版本有一個編譯錯誤,並在你的第一個版本,如果你不使用&
這涉及副本這意味着它正在做東西非常不同(可能錯誤),因爲更改不會影響當前對象,而是一個局部變量,它將在範圍的末尾被銷燬。
在不涉及模板基類一般情況下,
x=1;
擊敗了所有。
謝謝。出於某種原因,我認爲其中一種是首選方式,或者允許程序員對代碼進行更多操作。讓我再問你一個問題:使用**這個指針訪問類的成員的要求是什麼? – SunnyBoyNY
我想重申,它只是在少數情況下明確的,其中之一就是如果您的基類是模板並且您正在訪問其成員。 [C++ FAQ](http://www.parashift.com/c++-faq/nondependent-name-lookup-members.html)有更多關於原因的信息。它與模板相對於其餘代碼的解析有關。 –
@SunnyBoyNY另一個原因是使這樣的函數有意義 - void void SetX(int X){X = X; //哪個X是會員?使用this-> X = X}' –
我從來沒有見過,但它應該是'this-> x'。 – chris
不同之處是'class_name ma = * this;'複製? –
billz
你能提供一個示例程序嗎? – NeonGlow