首页 > 解决方案 > `auto pp` 和 `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是正确的。但是ppppp具有相同的价值...

输出:

0x61fefc
0x61fefc

标签: c++c++11pointersauto

解决方案


在您展示的特定示例中,没有区别。但是想象一下,您稍后会添加两个const限定符,如下所示:

const auto pp = p;
const auto *ppp = p;

还是一样吗?事实证明,这与

int * const pp = p; // pointer is readonly
const int *ppp = p; // pointer is readonly

因为 in auto pp = p,整体auto匹配int*,并const修改左侧的内容(或右侧的内容,如果左侧没有任何内容)。相反, in auto *ppp = pautomatch int,这就是const适用的。

由于这个显着的差异,并且因为我们应该尽可能使用const变量,所以我建议您在auto*对指针变量使用类型推导时始终使用。没有办法对const指针本身而不是指针进行限定,如果你想对const两者都进行限定,可以通过

const auto * const pppp = p;

没有*.


推荐阅读