2013-01-08 50 views
0

聲明指向這個對象的優點或理由是什麼?聲明指向* this *對象的優點或原因是什麼?

假設一個對象有一個私有變量「x」。

我經常看到這樣的代碼:

class_name<T> &ma = *this; 
ma.x = 1; 

,而不是

this->x = 1; 

或者也可以簡單

x = 1; 
+1

我從來沒有見過,但它應該是'this-> x'。 – chris

+6

不同之處是'class_name ma = * this;'複製? – billz

+1

你能提供一個示例程序嗎? – NeonGlow

回答

2

當你的類的基類是模板類,在this指針變爲強制引用基類的任何成員。這就是爲什麼前兩個版本可能出現在這種情況下,而第三個版本會出錯。

前兩個版本是相同的(在它們被修復後 - 見下文),並且只在個人風格上有所區別。

class_name<T>& ma = *this; 
ma.x = 1; 
ma.y = 2; 

VS

this->x = 1; 
this->y = 2; 

由於@克里斯指出,你的第二版本有一個編譯錯誤,並在你的第一個版本,如果你不使用&涉及副本這意味着它正在做東西非常不同(可能錯誤),因爲更改不會影響當前對象,而是一個局部變量,它將在範圍的末尾被銷燬。

在不涉及模板基類一般情況下,

x=1; 

擊敗了所有。

+0

謝謝。出於某種原因,我認爲其中一種是首選方式,或者允許程序員對代碼進行更多操作。讓我再問你一個問題:使用**這個指針訪問類的成員的要求是什麼? – SunnyBoyNY

+0

我想重申,它只是在少數情況下明確的,其中之一就是如果您的基類是模板並且您正在訪問其成員。 [C++ FAQ](http://www.parashift.com/c++-faq/nondependent-name-lookup-members.html)有更多關於原因的信息。它與模板相對於其餘代碼的解析有關。 –

+0

@SunnyBoyNY另一個原因是使這樣的函數有意義 - void void SetX(int X){X = X; //哪個X是會員?使用this-> X = X}' –

相關問題