簡體   English   中英

`auto pp`和`auto * ppp`有什么區別?

[英]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;

這個程序將為ppppp產生相同的輸出,但為什么呢? auto推斷變量應該是int ,所以我認為ppp的聲明是對的。 ppppp具有相同的價值......

輸出:

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 = pauto會將int*作為一個整體進行匹配,而const會修改其左側的內容(或者如果左側沒有任何內容則修改其右側的內容)。 相反,在auto *ppp = pauto匹配int ,這就是const適用的。

由於這個顯着的差異,並且因為我們應該盡可能使用const變量,我建議你在對指針變量使用類型推導時總是使用auto* 沒有辦法對指針本身進行const限定而不是指針對,如果你想對兩者進行const限定,這是可能的

const auto * const pppp = p;

沒有* ,這是行不通的。

在這種特殊情況下, autoauto *沒有區別。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM