资格转换的模糊性

问题描述 投票:0回答:1

我想我或者误解了标准中的某些东西或者某些东西可能含糊不清。这是关于资格转换的。

根据最新的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 =炭
  • cv2 = const
  • P2 = *
  • cv1 = const
  • P1 - *
  • cv0 =空
  • Π0= *

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

  • n = 2
  • U =炭
  • cv0 = const
  • Π0= *
  • cv1 = const
  • P1 - *
  • cv2 =空
  • P2 = *

它将对以下句子http://eel.is/c++draft/conv.qual#3.3产生影响:

如果cv1i和cv2i不同,则const在每个cv2k中为0 <k <i。

因为对于第一种解释,对于i = 1或2,句子永远不会被满足,而对于第二种解释,对于i = 1或2,句子将是真的。

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

如果cv1i和cv2i不同,则const在每个cv2k中为0 <k <i。

对于i = 0或1.对于i = 0或1,cv set为空,因此我们可以说这个集合的所有cv都有const,因为all都是none而且集合中没有元素,但我们也可以假设没有元素有const,因为集合中没有元素。

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

c++ type-conversion const volatile qualifiers
1个回答
0
投票

答案是由@MartinBonner在对问题的评论中给出的。

我没有注意到U旁边有cvn,这意味着constness分解从最外部指针到最内部指针。

(具有最大索引的cv将最接近类型U)。

© www.soinside.com 2019 - 2024. All rights reserved.