gpt4 book ai didi

c++ - 为什么* p的类型在(const int * p)之后是int但不能更改其值?

转载 作者:行者123 更新时间:2023-12-02 09:48:03 25 4
gpt4 key购买 nike

这是我的代码

    int age = 36;
const int* p = &age;

cout << typeid(age).name() << endl;
cout << typeid(p).name() << endl;
cout << typeid(*p).name() << endl;
结果是 intint const *int。我对 *p的类型感到困惑,即 int。为什么我们不更改 *p的值呢?
    *(&age) += 1;
*p += 1;
pint const *,为什么不使用 const int* *p应该与 age相同 *(&age),但不适用于 +=操作。
    int* const q = &age;
cout << typeid(q).name << endl;
cout << typeid(*q).name << endl;
使用 typeid()会引发错误,为什么会这样?

最佳答案

因为typeid operator忽略了cv限定词,所以您得到了intconst int intead。

In all cases, top-level cv-qualifiers are ignored by typeid (that is, typeid(const T) == typeid(T)).


这只是 typeid的特殊行为; *p返回的仍然是 const,您不能直接对其进行修改。 (这就是我们使用指向const的指针而不是指向非const的指针的要点。)
给定 int* const qconst在指针上进行限定,即它是顶级限定符,然后 typeid(q)忽略 const并给出 int*
顺便说一句: int const *const int*相同。

关于c++ - 为什么* p的类型在(const int * p)之后是int但不能更改其值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63432356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com