我想我或者误解了标准中的某些东西或者某些东西可能含糊不清。这是关于资格转换的。
根据最新的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 **;
可能会跟着
但由于没有说分解应该走向哪个方向(IMO)也可以用另一种方式解释:
它将对以下句子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分解以及应该采用的方向?
答案是由@MartinBonner在对问题的评论中给出的。
我没有注意到U旁边有cvn,这意味着constness分解从最外部指针到最内部指针。
(具有最大索引的cv将最接近类型U)。