如何解决为什么* p的类型在const int * p之后是int但不能更改其值?
这是我的代码
int age = 36;
const int* p = &age;
cout << typeid(age).name() << endl;
cout << typeid(p).name() << endl;
cout << typeid(*p).name() << endl;
结果为int
,int const *
,int
。我对*p
的类型是int
感到困惑。为什么我们不更改*p
的值呢?
*(&age) += 1;
*p += 1;
p
是int const *
,为什么不const int*
? *p
应该与age
*(&age)
相同,但不适用于+=
操作。
甚至更多
int* const q = &age;
cout << typeid(q).name << endl;
cout << typeid(*q).name << endl;
使用typeid()
时会抛出错误,为什么会这样?
解决方法
因为typeid operator忽略了简历限定词,所以您获得了int
与const int
的内插。
在所有情况下,typeid(即
typeid(const T) == typeid(T)
)都会忽略顶级cv限定词。
这只是typeid
的特殊行为; *p
返回的内容仍然是const
,您不能直接对其进行修改。 (这就是我们使用指向const的指针而不是指向非const的指针的原因。)
给出int* const q
,const
在指针上是合格的,即它是顶级限定符,然后typeid(q)
忽略const
并给出int*
。 / p>
顺便说一句:int const *
与const int*
相同。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。