我正在阅读有关指针的内容,但对某一部分感到困惑。给出的代码如下:
int i=0;
const int ci = i;
auto *p = &ci;`
现在的问题是 p
的类型是什么?我认为 p
将是一个 指向 const int 的指针。这样对吗?如果是,这是否等于 const int*?指向 const int
的指针是否与 const int*
相同?
答案 0 :(得分:1)
在 C++ 中,const
关键字通常应用于类型左侧的部分。
所以 int const*
是一个指向常量整数的指针,而 int*const
是一个指向非常量整数的常量指针。
示例中 p
的类型是 int const*
。
把 const
放在右边的习惯被称为东常量。
现在有一个“const适用于左边”的例外;当左侧什么都没有时,它会应用于右侧。这种令人困惑的异常意味着 const int*
是 int const*
。但是 using X=int*; const X
变成了 int*const
。
把 const
放在左边的习惯,以及由此产生的混乱,被称为 west const。
简而言之,答案是肯定的,除非您添加别名。
答案 1 :(得分:1)
我认为 p 将是一个指向 const int 的指针。
是的,这就是 p
。
如果是,这将等于 const int*
吗?
是的:const int* p;
正是您将 p
定义为指向 const int
的指针的方式。
以防万一,您可以定义/初始化一个指向(非常量)const
的 int
指针,如下所示:
int* const cp = &i;
而且,对于指向 const
的 const int
指针,您需要两次 const
限定符:
const int* const cp = &ci;