const 修饰的量 叫常量 和普通变量的区别是什么? C++有两点: 1、编译方式不同,用立即数替换 2、不能作为左值被修改 const修饰的量(即常量)常出现的错误是: 1、常量不能再作为左值(即不能直接修改常量的值) 2、不能把常量的地址(&a)泄漏给一个普通的指针(p)或者普通的引用变量(可以间接修改常量的值) const和一级指针的结合:有两种情况: ①不能修改指针的解引用 ②不能修改指针的指向 C++的语言规范:const修饰的是离它最近的类型(有点像飞轮海的《只对你有感觉》,const就只对离它最近的数据类型有感觉) const如果右边没有指针*的话,const是不参与类型的 总结const和指针的类型转换公式: ① int * <= const int * ❌ 因为如果把右边常量赋值给左边的普通变量,那左边一解引用就可以对常量的值进行修改了,这样是不被允许的。 ② const int * <= int * ✅ 普通变量赋到左边常量去倒是没有什么约束的。 ③ int ** <= const int ** ❌ ④ const int ** <= int ** ❌ const和多级指针结合的时候,赋值时必须两边都有const (有空可以思考一下为什么) ⑤ int ** <= int * const* ❌ // 这是**const和一级指针结合**的情况,因为只看const后面的星号*,前面的 * 和 const没关系。两边都去掉 int *,那么就成了 * <= const * ,就跟第一个一样了,所以是错误的。 ⑥ int * const* <= int ** ✅ // 跟⑤类似,去掉int * 看一下就知道了,去掉之后就是②了,所以是正确的。 参考文章:[一级指针&二级指针知识点梳理]( https://blog.csdn.net/qq_53830608/article/details/121674525?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166851536416782425144095%2522%252C%2522scm%2) const和二级指针的结合 ![](https://tva1.sinaimg.cn/large/008vxvgGgy1h86tyqicy8j30kd0a674u.jpg)
原文地址:http://www.cnblogs.com/algorithm-code/p/16905450.html