gpt4 book ai didi

c++ - 学习 C++ : why is this illegal?

转载 作者:行者123 更新时间:2023-11-30 05:09:31 24 4
gpt4 key购买 nike

我几天前买了 C++ Primer 这本书,我开始学习这门新语言了!

此刻,我想弄明白为什么我自己写的这个 block 是非法的:

我将一个 const int 初始化为 512;我初始化一个指向 n 的 const int const 指针;但它不允许我创建一个指向指针的 const int const 指针,即使正确使用 double ** 和所有内容也是如此:

const signed int n = 512;
const signed int *const nPointer = & n;
const signed int **const nPointer2 = & nPointer;

有人有简单的解释吗?感谢您的宝贵时间!

最佳答案

为了修复代码,您有两个选择:

//Option one : 
const signed int *const nPointer = & n;
const signed int *const *const nPointer2 = & nPointer;
//Option two :
const signed int * nPointer = & n;
const signed int **const nPointer2 = & nPointer;

解释:

当 nPointer 是一个指向 T 的常量指针时,nPointer2 应该指向一个指向 T 的常量指针,如第一个选项。或者,当 nPointer2 是指向指向 T 的非常量指针的指针时,指针对象 nPointer 也应该是非常量。

当你读到本书中定义你自己的类型别名的部分时,你可以去除杂乱,看看这些替代方案是如何工作的,如下所示:

//simplifying notation:
using myType = const signed int *;
using myTypeC = const signed int * const;

//your code equivalent to:
myTypeC nPointer = & n;
myType *const nPointer2 = & nPointer;

//Option One:
myTypeC nPointer = & n;
myTypeC *const nPointer2 = & nPointer;
//Option Two:
myType nPointer = & n;
myType *const nPointer2 = & nPointer;

关于c++ - 学习 C++ : why is this illegal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141274/

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