自动如何推断指针类型?

时间:2016-09-18 10:01:36

标签: c++ pointers auto

在下面的代码中,我无法理解auto如何知道右边的东西是指针:

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

因为根据我的理解,指针包含的地址只有unsigned int,所以auto如何将其推断为指针而不是unsigned int

2 个答案:

答案 0 :(得分:6)

你也可以问问题&#34;最终,我的程序中的所有内容都是字节,那么auto为什么不推导出所有内容都是uint8_t[]?&#34;

嗯,这很简单。 ptr的类型为int*,因此test的类型也为int*。生成的组件看起来并不重要。可能是cpu以同样的方式处理int*unsigned int,但这与C ++无关,因为C ++是高级语言

除此之外。 &#34;指针是无符号整数的基础语句&#34;不是真的。指针是一种允许读取和写入该变量中包含的内存地址的类型。 unsigned int是...... unsigned int。仅此而已。

答案 1 :(得分:3)

标准说:

  

使用auto声明的变量的类型是从其初始化程序中推导出来的。

因此,test的类型是从ptr(即其初始化程序)和int *中推断出来的。

请注意auto遵循几乎相同的模板类型扣除规则 您可以参考这些内容,详细了解autoauto&const auto &auto&&等之间的差异。