在下面的代码中,我无法理解auto
如何知道右边的东西是指针:
int x = 100;
int *ptr = & x;
auto test = ptr;
std::cout<<*test<<std::endl;
因为根据我的理解,指针包含的地址只有unsigned int
,所以auto
如何将其推断为指针而不是unsigned int
?
答案 0 :(得分:6)
你也可以问问题&#34;最终,我的程序中的所有内容都是字节,那么auto
为什么不推导出所有内容都是uint8_t[]
?&#34;
嗯,这很简单。 ptr
的类型为int*
,因此test
的类型也为int*
。生成的组件看起来并不重要。可能是cpu以同样的方式处理int*
和unsigned int
,但这与C ++无关,因为C ++是高级语言。
答案 1 :(得分:3)
标准说:
使用auto声明的变量的类型是从其初始化程序中推导出来的。
因此,test
的类型是从ptr
(即其初始化程序)和int *
中推断出来的。
请注意auto
遵循几乎相同的模板类型扣除规则
您可以参考这些内容,详细了解auto
,auto&
,const auto &
,auto&&
等之间的差异。