orm*_*orm 4 c++ pointers const c++11
我相信这可能适用于许多T,但我知道这适用于整数.作为学习C++的一部分,我试图用标准中的语言来解释以下行为.
typedef const int * constintptr;
typedef int * intptr;
intptr p;
constintptr cp = p;
const constintptr& crcp = p;
//constintptr & rcp = p;
Run Code Online (Sandbox Code Playgroud)
从查看n3337,第8.5.3节.看来这种行为可以解释为int*可以转换为const int*prvalue,但不兼容引用.(如果我错了,请纠正我).
我看到这是理想的行为(或者我们可以颠覆const),这种行为的可取性不是这个问题的意思.
问题是在标准中指定(或暗示)它们的intptr和constintptr不是参考兼容的.
相同的部分,8.5.3/4(编号来自n3797,我可用)定义参考兼容:
给定类型的" CV1
T1"和" CV2T2"," CV1T1"是参考相关 于" CV2T2"如果T1是相同的类型T2,或者T1是一个基类的T2." cv1T1" 与" cv2 " 引用兼容,如果与引用相关,并且cv1与cv2相同,或者cv- qualified与cv2相同T2T1T2
所以你有T1 int*和T2的类型int const*.它们不是同一类型.它们中的任何一个都不是另一个的基类(因为它们都不是一个类).因此,它们与参考无关.
当标准说"CV1-T1"时,它指任何类型,它是施加0以上的结果const,volatile所述类型T1.它并不意味着文本替换,也就是说它不代表任何由0或更多关键字声明的类型const,volatile后跟另一个标记序列,它是T1的类型声明.
因此,您可能误解了这一点,以至于您认为这const int*是一个简洁的合格版本int*.如果是,那么根据一般规则,它们将与参考相关,因此标准中需要有文本才能作出例外.但事实并非如此.int *const是一个简历的合格版本int*.
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |