指向非常量数据的常量指针

Kri*_*ula 5 c++ pointers constants type-mismatch

考虑以下情况1:

const int n = 5;
int* p = &n; 
Run Code Online (Sandbox Code Playgroud)

这是无效的,因为&nis 的类型cont int*pis 的类型int *(类型不匹配错误)。

现在,考虑这种情况 2:

int k = 4;
int *const p = &k; 
Run Code Online (Sandbox Code Playgroud)

本例编译成功,没有任何错误。显然,p是 类型int * const并且&k是 类型int *。在这种情况下,存在类型不匹配,但它是有效的。

问题:即使存在类型不匹配,为什么第二种情况有效?

eer*_*ika 4

在这种情况下,存在类型不匹配

不; 在这种情况下不存在类型不匹配。它是一个指向非常量的指针,您可以使用指向非常量的指针来初始化它。

或者,如果您坚持存在“不匹配”,那么它类似于以下“不匹配”:

const int b = 42;
Run Code Online (Sandbox Code Playgroud)

为什么第二种情况有效

简单地说:初始化器的常量性与它是否初始化 const 对象无关。此外,初始化器是非类类型的纯右值,因此 const 限定甚至不适用于它。

  • @cigien 如果您发现重复的内容,请随时投票关闭。 (7认同)