[英]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
遵循幾乎相同的模板類型推導規則。
您可以參考它們以獲取有關auto
, auto&
, const auto &
, auto&&
等之間差異的更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.