C语言隐式限定转换示例合理性探讨及个人分析正确性求证
关于C语言隐式限定指针转换的疑问与分析
问题背景
标准中关于隐式限定转换的关键描述:
指向非const类型的指针可隐式转换为指向同一或兼容类型的const限定版本的指针
常见的示例代码:
int* p = 0; const int* cp = p; // OK: adds qualifiers (int to const int)
我的分析与疑问
先以浮点数转整数的隐式转换为例,其依赖简单赋值规则:
在简单赋值(=)中,右操作数的值转换为赋值表达式的类型(C11 6.5.16.1 p2)
对应示例:
int n=3.14; //double to int
此处虽为初始化,但我认为其依赖简单赋值规则,因简单赋值要求触发隐式转换。
对于隐式限定转换,结合以下两条标准规则:
赋值表达式的类型是左操作数经左值转换后的类型(6.5.16 p3)
左操作数为原子、限定或无限定指针类型,且(考虑左操作数经左值转换后的类型)两个操作数均为指向兼容类型的限定或无限定版本的指针(6.5.16.1 Constraints p1)
我对上述指针示例存在疑问:p的类型为int*,但按照规则,赋值表达式类型应为左操作数经左值转换后的int*而非const int*,为何该示例会被用作隐式限定转换的案例?
现请教:我的上述分析是否正确?若正确,请给出符合隐式限定转换的标准示例;若错误,请详细指出问题所在。
内容的提问来源于stack exchange,提问作者user24723440
相关产品推荐
相关产品推荐

