c++ - `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
因为 in auto pp = p
,整体auto
匹配int*
,并const
修改左侧的内容(或右侧的内容,如果左侧没有任何内容)。相反, in auto *ppp = p
,auto
match int
,这就是const
适用的。
由于这个显着的差异,并且因为我们应该尽可能使用const
变量,所以我建议您在auto*
对指针变量使用类型推导时始终使用。没有办法对const
指针本身而不是指针进行限定,如果你想对const
两者都进行限定,可以通过
const auto * const pppp = p;
没有*
.
推荐阅读
- java - 在我的启动器应用程序中按 Homebutton 转到主屏幕
- firefox - Computed Knockout JS 函数似乎没有在 firefox 中取消绑定按键事件
- angular - 为什么我在使用 ngrx 效果时会收到这个可观察到的警告
- css - .less mixin 守卫不接受@media 表达式
- python - 使用两个单独的字符串时,如何删除“扫描字符串文字时 EOL”错误?
- django - OSError:[Errno 99] 地址不可用 - 从 django docker 应用程序使用 gmail smtp 发送电子邮件
- sql - 如何在没有函数 generate_series 的 Postgresql 中创建数据系列
- wpf - 从 WPF 用户控件访问 Winform
- python - 张量流RegisterGradient中参数的形状?
- jenkins - 是否可以在管道 Jenkinsfile 中对 cron 触发器的输入进行字符串插值?