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发布于 2018-11-29 11:33:46
在您所展示的特定示例中,没有区别。但是,假设稍后添加两个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-qualify,如果您想同时使用const-qualify,这是可能的
const auto * const pppp = p;如果没有*,这是行不通的。
发布于 2018-11-29 10:52:38
在这种情况下,auto和auto *没有区别。在auto pp = p;的情况下,将推导为int *,而在auto *ppp = p;的情况下,将推导为int。
对于变量,指定要声明的变量的类型将自动从其初始化器中推断出来。..。
注意,与auto不同,auto *只推断指针类型。
https://stackoverflow.com/questions/53537326
复制相似问题