C++ 资格转换中的歧义
我想我可能误解了标准中的某些内容,或者标准中的某些内容可能模棱两可。这是关于资格转换的 根据最新的草案 类型T的cv分解是cvi和Pi的序列,因此T是“cv0 P0 cv1 P1”⋯ cvn−1 Pn−1 cvn U“表示n>0 就我对T型分解的理解而言:C++ 资格转换中的歧义,c++,type-conversion,constants,volatile,qualifiers,C++,Type Conversion,Constants,Volatile,Qualifiers,我想我可能误解了标准中的某些内容,或者标准中的某些内容可能模棱两可。这是关于资格转换的 根据最新的草案 类型T的cv分解是cvi和Pi的序列,因此T是“cv0 P0 cv1 P1”⋯ cvn−1 Pn−1 cvn U“表示n>0 就我对T型分解的理解而言: using T1 = const char * const **; 可能会跟在后面 n=2 U=char cv2=常数 P2=* cv1=常数 P1-* cv0=空 P0=* 但由于没有说明分解应朝哪个方向进行,因此(IMO)也可以用另
using T1 = const char * const **;
可能会跟在后面
- n=2
- U=char
- cv2=常数
- P2=*
- cv1=常数
- P1-*
- cv0=空
- P0=*
- n=2
- U=char
- cv0=常数
- P0=*
- cv1=常数
- P1-*
- cv2=空
- P2=*
标准中是否有任何地方可以解释如何准确理解cv分解以及分解的方向?答案由@MartinBonner在对问题的评论中给出 我没有注意到就在U的旁边有cvn,这意味着constness分解从最外部的指针到最内部的指针
(指数最大的cv最接近U型)。请注意,您引用的样本中p值最高的是
Pn-1
。在这两种情况下都有P2,因此n
必须是3(而不是2)。注意,这也意味着你需要一个cv3(可能是空的)。你说的方向是什么意思?引文上写着“cv0 P0 cv1 P1⋯ cvn−1 Pn−1 cvn U“不是”cvn Pn cvn-1 Pn-1…cv1 P1 cv0 U“const char*const**
是“指向const char的指针指针”,因此cv0={},P0=”指针指向”,cv1={},P1=”指针指向”,cv2={const
},P2=”指针指向”,cv3={const
},U=char
@bonner感谢您指出这一点。现在我明白了。因为我没有注意到cvn代表U,所以我不知道cvn-1代表的是最外层还是最内层的指针。现在清楚了。谢谢@Dawidlarski我能鼓励你写下来作为答案吗?