繁体   English   中英

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

[英]What's the difference between `auto pp` and `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 = pauto会将int*作为一个整体进行匹配,而const会修改其左侧的内容(或者如果左侧没有任何内容则修改其右侧的内容)。 相反,在auto *ppp = pauto匹配int ,这就是const适用的。

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

const auto * const pppp = p;

没有* ,这是行不通的。

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

auto限定符

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM