几天前我买了C ++ Primer书,我开始学习这门新语言了!
目前,我试图理解为什么我自己写的这个块是非法的:
我将const int初始化为512; 我初始化一个const int const指向n; 但它不允许我创建一个指向指针的const int const指针,即使使用正确的双**和所有内容:
const signed int n = 512;
const signed int *const nPointer = & n;
const signed int **const nPointer2 = & nPointer;
有人有简单的解释吗?谢谢你的时间!
答案 0 :(得分:1)
为了修复代码,您有两个选择:
//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的非const指针的指针时,指针nPointer也应该是非const的。
当您到达本书中您定义自己的类型别名的部分时,您可以删除混乱,看看这些替代方法如何工作如下:
//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;
答案 1 :(得分:0)
首先简化问题并删除签名。问题保持不变 其次,使用编译器并读取ERROR消息。这适用于所有语言,而不仅仅是C ++ 问题出在这里:
const int **const nPointer2 = & nPointer;
nPointer类型是const signed int * const
你的指示是
const signed int **const nPointer2 = & nPointer;
所以你得到以下信息:
错误:从'const int * const *'无效转换为'const int **'
如你所见,const介于你的两颗星之间。创建编译错误。
正如您所看到的那样使用&把*放在结束。