如何解决为什么我可以在从堆中获取内存时更改 const int** 类型中 int* 的值
const
限定符有一些问题。
我试着这样做:
int a{ 3 };
int *p{ &a };
//const int **pp{ &p }; // FIXME: Compiler demands that p must have a const int *type
const int *const* pp{ &p }; // works here but it means,that I have a pointer to the const pointer to the const value
*pp = nullptr; // doesn't work cause of upper type
导致错误:
<source>:8:5: error: read-only variable is not assignable
*pp = nullptr; // doesn't work cause of upper type
~~~ ^
但是:如果我处理 new
,它会很有趣
const int **pp1{ new const int* {&p} }; // Here I have a poiner to pointer to const int,so I can change it
*pp1 = nullptr; // works
那么,为什么编译器需要一个 const int* const*
?编译器 - MSVC,标准 - c++17
更新:
const int *p{ nullptr };
const int **pp{ &p }; // My intention
*pp = nullptr; // it works cause pointer non - const
但是如何在 const int *p
中没有 const 的情况下获得相同的结果?
解决方法
在某些情况下,此站点 https://cdecl.org/ for C 语法也可以帮助使用 C++。为此:
const int *const* pp
它告诉我:
将pp声明为指向const int的const指针
为此:
const int **pp1
它告诉我:
将 pp1 声明为指向 const int 的指针
让我们使用它......
*pp = ... // ERROR !
当您取消引用 pp
时,您会得到一个“指向 const int 的 const 指针”(因为 pp
是“指向指向 const int 的 const 指针的指针”)。您不能分配给 const whatever
。什么算顶级const
!
*pp1 ... // OK !?!
当您取消引用 pp1
时,您会得到一个“指向 const int 的指针”(因为 pp1
是一个“指向指向 const int 的指针的指针”)。指向 const int
的指针不是常量。重要的是顶级const
!它指向一个 const int
但指针本身不是 const
。
结论:您的两个版本之间的区别不在于 new
的使用,而是您取消引用的指针类型(然后尝试分配给指针对象)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。