【发布时间】:2021-04-19 04:41:06
【问题描述】:
考虑以下情况1:
const int n = 5;
int* p = &n;
这是无效的,因为&n 的类型为cont int* 而p 的类型为int *(类型不匹配错误)。
现在,考虑这种情况 2:
int k = 4;
int *const p = &k;
此案例编译成功,没有任何错误。显然,p 是 int * const 类型,&k 是 int * 类型。在这种情况下,存在类型不匹配,但它是有效的。
问题:为什么第二种情况有效,即使类型不匹配?
【问题讨论】:
-
您可以将非常量分配给 const,但反之则不行。
-
“const”-ify 访问总是合法的,但反之则不然。如果您具有读/写访问权限,则可以不使用写入部分并保持只读状态。但是如果你只有读权限,你就不能申请写权限。
-
这是两个不同的常量。一个是低级 const,另一个是顶级 const。
-
1.指向
const的指针(或引用)只是一个承诺,不会通过该指针/引用修改对象。这并不意味着该对象是不可修改的。 2.int *const是一个常量指针(不能重新赋值指针指向别的东西),而不是指向const的指针。 -
所以你会认为
const int n = 5; int *const p = &n;是合法的吗?不, const 在哪里很重要。指向 int 的常量指针。当然你可以用 gvalue 初始化一个常量
标签: c++ pointers constants type-mismatch