`auto pp`和`auto * ppp`有什么区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了`auto pp`和`auto * ppp`有什么区别?相关的知识,希望对你有一定的参考价值。

int foo = 11;
int *p = &foo;

auto pp = p;
auto *ppp = p;

cout << pp << endl;
cout << ppp << endl;

这个程序将为ppppp产生相同的输出,但为什么呢? auto推断变量应该是int,所以我认为ppp的声明是正确的。但ppppp具有相同的价值......

输出:

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中,autoint*作为一个整体进行匹配,而const修改了左侧的内容(或者如果左侧没有任何内容则修改其右侧的内容)。相反,在auto *ppp = pauto匹配int,这就是const适用的。

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

const auto * const pppp = p;

如果没有*,这是行不通的。

另一答案

在这种特殊情况下,autoauto *没有区别。如果auto pp = p;类型将被推断为int *,而在auto *ppp = p;类型的情况下将推断为int

auto qualifier

对于变量,指定将从其初始化程序自动推导出正在声明的变量的类型。 [...]

请注意,与auto不同,auto *将仅推导出指针类型。

以上是关于`auto pp`和`auto * ppp`有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

Auto Generate和Auto Increment Build Number有什么区别?

css中margin:auto什么意思?margin:auto属性的用法详解

深谈auto变量

php auto_prepend_file和auto_append_file的妙用

这里的#auto 属性是啥以及为啥需要它

带三元运算符和 nullptr 的 auto