首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“`auto”和“`auto * pp`”有什么区别?

“`auto”和“`auto * pp`”有什么区别?
EN

Stack Overflow用户
提问于 2018-11-29 10:50:52
回答 2查看 2.2K关注 0票数 20
代码语言:javascript
运行
复制
int foo = 11;
int *p = &foo;

auto pp = p;
auto *ppp = p;

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

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

输出:

代码语言:javascript
运行
复制
0x61fefc
0x61fefc
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-29 11:33:46

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

代码语言:javascript
运行
复制
const auto pp = p;
const auto *ppp = p;

还是一样的吗?原来这和

代码语言:javascript
运行
复制
int * const pp = p; // pointer is readonly
const int *ppp = p; // pointer is readonly

因为在auto pp = p中,auto与整个int*匹配,const修改左侧的内容(如果左边没有任何东西,则修改右边的内容)。相反,在auto *ppp = p中,autoint匹配,这就是const所适用的。

由于这个显著的差异,并且我们应该尽可能地使用const变量,所以我建议您在对指针变量使用类型推断时始终使用auto*。没有方法可以将指针本身替换为const-qualify,如果您想同时使用const-qualify,这是可能的

代码语言:javascript
运行
复制
const auto * const pppp = p;

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

票数 30
EN

Stack Overflow用户

发布于 2018-11-29 10:52:38

在这种情况下,autoauto *没有区别。在auto pp = p;的情况下,将推导为int *,而在auto *ppp = p;的情况下,将推导为int

qualifier

对于变量,指定要声明的变量的类型将自动从其初始化器中推断出来。..。

注意,与auto不同,auto *只推断指针类型。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53537326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档