`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;
这个程序将为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;
类型将被推断为int *
,而在auto *ppp = p;
类型的情况下将推断为int
。
对于变量,指定将从其初始化程序自动推导出正在声明的变量的类型。 [...]
请注意,与auto
不同,auto *
将仅推导出指针类型。
以上是关于`auto pp`和`auto * ppp`有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
Auto Generate和Auto Increment Build Number有什么区别?
css中margin:auto什么意思?margin:auto属性的用法详解