Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 资格转换中的歧义_C++_Type Conversion_Constants_Volatile_Qualifiers - Fatal编程技术网

C++ 资格转换中的歧义

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)也可以用另

我想我可能误解了标准中的某些内容,或者标准中的某些内容可能模棱两可。这是关于资格转换的

根据最新的草案

类型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)也可以用另一种方式进行解释:

  • n=2
  • U=char
  • cv0=常数
  • P0=*
  • cv1=常数
  • P1-*
  • cv2=空
  • P2=*
这将对以下句子产生影响:

如果cv1i和cv2i不同,则0 因为对于第一种解释,i=1或2的句子永远不会满足,而对于第二种解释,i=1或2的句子将是正确的

我的第二个疑问是,如何解释这个句子

如果cv1i和cv2i不同,则0 对于i=0或1。对于i=0或1,cv集为空,因此我们可以说该集合的所有cv都有常数,因为all为none,集合中没有元素,但我们也可以说没有元素有常数,因为集合中没有元素


标准中是否有任何地方可以解释如何准确理解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我能鼓励你写下来作为答案吗?