关于`int * a,const * c;`声明中const关键字作用的技术疑问
问题解析:声明中const的作用异常
代码的正确语义
你写的声明语句:
int *a, const *c = &n;
按照C/C++语法规则,等价于分开写的:
int* a; const int* c = &n;
也就是说,c的类型应该是指向const int的指针,此时*c = 234;这类修改操作会被编译器禁止,因为通过c不能修改它指向的const对象。
为什么你的代码能正常运行?
你遇到的情况不符合标准C/C++的预期,可能的原因包括:
- 编译器设置问题:Visual Studio的MSVC编译器可能被配置为弱化const检查(比如启用了兼容旧代码的选项,或关闭了严格类型检查),导致本应报错的代码通过编译。
- 编译器版本问题:非常旧的VS版本(如VS 6.0)对const的约束不够严格,可能将const视为提示而非强制规则。
- 调试信息显示错误:极少数情况下,调试器的类型显示可能存在bug,但这不会影响编译器对代码的实际编译逻辑。
关于const的作用
这里的const关键字并非无效——它在标准语法中的作用就是将c声明为指向const int的指针。你遇到的异常是编译器环境导致的,而非语言本身的设计问题。
另外,你提到的代码风格问题确实需要注意:在同一行声明多个带有不同类型限定符的变量,很容易引发误解和语法错误,最好养成每个变量单独一行声明的习惯。
内容的提问来源于stack exchange,提问作者busbug
相关产品推荐
相关产品推荐

