资格转换中的歧义

时间:2019-02-26 13:19:03

标签: c++ type-conversion const volatile qualifiers

我认为我或者误解了某些东西,或者标准中的某些东西可能是模棱两可的。这与资格转换有关。

根据最新的http://eel.is/c++draft/conv.qual#1草案

  

类型T的cv分解是cvi和Pi的序列,使得对于n> 0,T为“ cv0 P0 cv1 P1⋯cvn-1 Pn-1 cvn U”,

据我了解,类型T的分解:

using T1 = const char * const **;

可能会关注

  • n = 2
  • U = char
  • cv2 = const
  • P2 = *
  • cv1 = const
  • P1-*
  • cv0 =空
  • P0 = *

但是由于没有说明分解应该朝哪个方向(IMO​​),也可以用另一种方式解释:

  • n = 2
  • U = char
  • cv0 = const
  • P0 = *
  • cv1 = const
  • P1-*
  • cv2 =空
  • P2 = *

以下句子http://eel.is/c++draft/conv.qual#3.3会有所不同:

  

如果cv1i和cv2i不同,则const在每个cv2k中的值为0

因为对于第一种解释,对于i = 1或2,该句子将永远不会实现,而对于第二种解释,对于i = 1或2,该句子将是正确的。

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

  

如果cv1i和cv2i不同,则const在每个cv2k中的值为0

对于i = 0或1。对于i = 0或1,cv集为空,因此我们可以说该集合的所有cv都具有const,因为在集合中所有元素都不存在,也没有元素,但是我们可以说没有元素具有const,因为集合中没有元素。

标准中是否有任何地方可以解释如何准确地理解cv分解以及该分解的方向?

1 个答案:

答案 0 :(得分:0)

@MartinBonner在对该问题的评论中给出了答案。

我没有注意到,在U旁边只有cvn,这意味着常数分解从最外面的指针到最里面的指针

(具有最大索引的简历最接近于类型U)。