2016-04-01 35 views
1

與我just learned一樣,對於指針p,存在兩種等同的方式來訪問被引用對象的成員,即p->foo(*p).foo我應該更喜歡點(。)還是箭頭( - >)運算符來訪問C++中的指針成員?

是否有最適合使用的技術參數?

說明:我讀到的一個參數是.更安全,因爲它不能重載,而->可以。不過,我想,必須有更多的參數,因爲在我工作的大多數C++代碼中,我只看到了-> -construct。

+2

'*'也可以重載。 –

+2

不要相信你讀的所有東西。你會好起來的。 –

+1

這是一個有見解的問題,沒有真正的答案。只要繼續編碼並自己決定 – Laurijssen

回答

5

對於原始指針,運算符不能被重載。

對於智能指針,operator *也可以重載,並且應該返回與operator ->相同的對象(儘管取消引用)。

operator ->是IMO比在圓括號中包裝所有東西更好的可讀性,特別是當你連續多次使用它時。

有輕微的區別在於operator ->被鏈接(operator ->被稱爲返回的對象,它可以再次被重載),而operator *不是,但它是不尋常的遇到這樣的情況,這將在不同的結果結束。

0

一般情況下,這兩種方法做同樣的事情:

​​

,除了在那裏你超載運營商獲得了一個專門的行爲的情況。

只要哪個更好,這取決於更好的方法... p->member是一個更清潔,使代碼更容易理解,這是一個很大的優點。

採取一個更復雜的例子:

struct NewType 
{ 
    int data; 
} 

void foo (NewType **p) 
{ 
    int temp0 = (*p)->data; 
    int temp1 = (*(*p)).data; 
} 

兩個temp0temp1將具有相同的價值,但它是一個更容易,看看發生了什麼事情的temp0

相關問題