auto 如何推导指针类型?

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

你也可以问这个问题"eventually, everything in my program is bytes, so why does auto doesn't deduce everything to be uint8_t[]?"

嗯,很简单。 ptr 的类型是 int* 所以 test 的类型也是 int*。生成的程序集看起来如何并不重要。 cpu 可能以相同的方式对待 int*unsigned int,但这与 C++ 无关,因为 C++ 是一种 高级语言

除此之外。 "a pointer is an unsigned int" 不正确的基本陈述。指针是一种允许读取和写入该变量中包含的内存地址的类型。一个无符号整数是……一个无符号整数。仅此而已。

标准说:

The type of a variable declared using auto is deduced from its initializer.

因此,test 的类型是从 ptr 之一(即 它的初始值设定项 )推导出来的,它是 int *

注意 auto 遵循几乎相同的模板类型推导规则。
关于autoauto&const auto &auto&&等的区别,可以参考它们。