[英]What's the difference between `auto pp` and `auto *ppp`?
int foo = 11;
int *p = &foo;
auto pp = p;
auto *ppp = p;
cout << pp << endl;
cout << ppp << endl;
这个程序将为pp
和ppp
产生相同的输出,但为什么呢? auto
推断变量应该是int
,所以我认为ppp
的声明是对的。 但pp
和ppp
具有相同的价值......
输出:
0x61fefc
0x61fefc
在您展示的特定示例中,没有区别。 但是想象你稍后会添加两个const
限定符,如下所示:
const auto pp = p;
const auto *ppp = p;
还是一样吗? 原来这是相同的
int * const pp = p; // pointer is readonly
const int *ppp = p; // pointer is readonly
因为在auto pp = p
, auto
会将int*
作为一个整体进行匹配,而const
会修改其左侧的内容(或者如果左侧没有任何内容则修改其右侧的内容)。 相反,在auto *ppp = p
, auto
匹配int
,这就是const
适用的。
由于这个显着的差异,并且因为我们应该尽可能使用const
变量,我建议你在对指针变量使用类型推导时总是使用auto*
。 没有办法对指针本身进行const
限定而不是指针对,如果你想对两者进行const
限定,这是可能的
const auto * const pppp = p;
没有*
,这是行不通的。
在这种特殊情况下, auto
和auto *
没有区别。 在auto pp = p;
情况下auto pp = p;
在auto *ppp = p;
情况下,类型将被推导为int *
auto *ppp = p;
类型将推断为int
。
auto
限定符 :
对于变量,指定将从其初始化程序自动推导出正在声明的变量的类型。 [...]
请注意,与auto
不同, auto *
将仅推导出指针类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.