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;
没有 *
就无法工作。
关于c++ - `auto pp` 和 `auto *ppp` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537326/