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

标签 c++ c++11 pointers auto

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中,auto整体匹配int*,而const修改了什么在它的左边(或者它的右边是什么,如果它的左边没有任何东西的话)。相反,在 auto *ppp = p 中,auto 匹配 int,这就是 const 适用的。

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

const auto * const pppp = p;

没有 * 就无法工作。

关于c++ - `auto pp` 和 `auto *ppp` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53537326/

相关文章:

c++ - PL/SQL - 设置空值

c++ - 为什么指针相减时会得到负数?

c++ - 成员初始化列表顺序

c++ - 对 std::atomic 变量的更改(读/写)如何跨线程传播

c++ - C++ 获取基类指针的方法

c - 我应该返回函数中的指针以便我可以使用它们吗?例如,我应该返回 table2_entry 吗?

c++ - std::sort 函数的编译器错误 (GCC 4.4)

c++ - 实现一个动态数组(我可以访问不存在的位置)

c++ - 将局部变量声明为右值引用是否无用,例如T&& r = move (v)?

c - 处理数组数据