與我just learned一樣,對於指針p
,存在兩種等同的方式來訪問被引用對象的成員,即p->foo
和(*p).foo
。我應該更喜歡點(。)還是箭頭( - >)運算符來訪問C++中的指針成員?
是否有最適合使用的技術參數?
說明:我讀到的一個參數是.
更安全,因爲它不能重載,而->
可以。不過,我想,必須有更多的參數,因爲在我工作的大多數C++代碼中,我只看到了->
-construct。
與我just learned一樣,對於指針p
,存在兩種等同的方式來訪問被引用對象的成員,即p->foo
和(*p).foo
。我應該更喜歡點(。)還是箭頭( - >)運算符來訪問C++中的指針成員?
是否有最適合使用的技術參數?
說明:我讀到的一個參數是.
更安全,因爲它不能重載,而->
可以。不過,我想,必須有更多的參數,因爲在我工作的大多數C++代碼中,我只看到了->
-construct。
對於原始指針,運算符不能被重載。
對於智能指針,operator *
也可以重載,並且應該返回與operator ->
相同的對象(儘管取消引用)。
operator ->
是IMO比在圓括號中包裝所有東西更好的可讀性,特別是當你連續多次使用它時。
有輕微的區別在於operator ->
被鏈接(operator ->
被稱爲返回的對象,它可以再次被重載),而operator *
不是,但它是不尋常的遇到這樣的情況,這將在不同的結果結束。
一般情況下,這兩種方法做同樣的事情:
,除了在那裏你超載運營商獲得了一個專門的行爲的情況。
只要哪個更好,這取決於更好的方法... p->member
是一個更清潔,使代碼更容易理解,這是一個很大的優點。
採取一個更復雜的例子:
struct NewType
{
int data;
}
void foo (NewType **p)
{
int temp0 = (*p)->data;
int temp1 = (*(*p)).data;
}
兩個temp0
和temp1
將具有相同的價值,但它是一個更容易,看看發生了什麼事情的temp0
。
'*'也可以重載。 –
不要相信你讀的所有東西。你會好起來的。 –
這是一個有見解的問題,沒有真正的答案。只要繼續編碼並自己決定 – Laurijssen