[英]What's the difference between `auto pp` and `auto *ppp`?
int foo = 11;
int *p = &foo;
auto pp = p;
auto *ppp = p;
cout << pp << endl;
cout << ppp << endl;
這個程序將為pp
和ppp
產生相同的輸出,但為什么呢? auto
推斷變量應該是int
,所以我認為ppp
的聲明是對的。 但pp
和ppp
具有相同的價值......
輸出:
0x61fefc
0x61fefc
在您展示的特定示例中,沒有區別。 但是想象你稍后會添加兩個const
限定符,如下所示:
const auto pp = p;
const auto *ppp = p;
還是一樣嗎? 原來這是相同的
int * const pp = p; // pointer is readonly
const int *ppp = p; // pointer is readonly
因為在auto pp = p
, auto
會將int*
作為一個整體進行匹配,而const
會修改其左側的內容(或者如果左側沒有任何內容則修改其右側的內容)。 相反,在auto *ppp = p
, auto
匹配int
,這就是const
適用的。
由於這個顯着的差異,並且因為我們應該盡可能使用const
變量,我建議你在對指針變量使用類型推導時總是使用auto*
。 沒有辦法對指針本身進行const
限定而不是指針對,如果你想對兩者進行const
限定,這是可能的
const auto * const pppp = p;
沒有*
,這是行不通的。
在這種特殊情況下, auto
和auto *
沒有區別。 在auto pp = p;
情況下auto pp = p;
在auto *ppp = p;
情況下,類型將被推導為int *
auto *ppp = p;
類型將推斷為int
。
auto
限定符 :
對於變量,指定將從其初始化程序自動推導出正在聲明的變量的類型。 [...]
請注意,與auto
不同, auto *
將僅推導出指針類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.