簡體   English   中英

自動如何推斷指針類型?

[英]How auto is deducing pointer type?

在下面的代碼中,我無法理解auto如何知道右側的東西是指針:

int x = 100;
int *ptr = & x;
auto test = ptr;
std::cout<<*test<<std::endl;

因為根據我的理解,指針包含的地址只是unsigned int所以如何auto推斷它是指針而不是unsigned int

你也可以問一個問題“最終,我程序中的所有內容都是字節,那么為什么auto不會將所有內容推斷為uint8_t[] ?”

嗯,這很簡單。 ptr的類型是int*所以test的類型也是int* 生成的組件看起來如何並不重要。 可能是cpu以相同的方式處理int*unsigned int ,但這與C ++無關,因為C ++是一種高級語言

除此之外。 “指針是無符號整數”的基礎語句不正確。 指針是一種允許讀取和寫入該變量中包含的內存地址的類型。 unsigned int是...... unsigned int。 僅此而已。

標准說:

使用auto聲明的變量的類型是從其初始化程序推導出來的。

因此, test的類型是從ptr (即它的初始化器 )和它的int *推導出來的。

請注意, auto遵循幾乎相同的模板類型推導規則。
您可以參考它們以獲取有關autoauto&const auto &auto&&等之間差異的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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