来自 (4.4/1 ) 的内容:
如果“cv2 T”比“cv1 T”更具cv限定性,则类型为“指向cv1 T”的右值可以转换为类型为“指向cv2 T”的右值。
我不知道标准在哪里定义了“更具cv限定性”的类型,但是据我所理解,带有const的声明符比无const的声明符更具cv限定性。
对于以下转换,如何适用标准中的引用,或者您如何知道哪一个具有更少或更多的cv限定性?
int *const c1 = 0;
int const* c2 = 0;
const int *const c3 = 0;
c1 = c2; // allowed
c1 = c3; // allowed
更新:
c2 = c1;
c2 = c3;
int
不比const int
更具有cv限定性,并且您不能简单地以4.4./4允许的方式添加const
。如果允许转换,您仍然无法分配给c1
,因为c1
是const
(无论所指向的类型的cv限定性如何)。 - CB Baileyc2 = c3;
是合法的,因为类型相同(除了顶层const),而赋值c2 = c1;
也是合法的,因为const int
比int
更具cv限定性。不过我只是为您阅读规范。 - CB Bailey