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
遵循几乎相同的模板类型推导规则。
关于auto
、auto&
、const auto &
、auto&&
等的区别,可以参考它们。
在下面的代码中,我无法理解 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
遵循几乎相同的模板类型推导规则。
关于auto
、auto&
、const auto &
、auto&&
等的区别,可以参考它们。