C++primer charpter 4笔记(一)
来源:互联网 发布:金融网络销售赚钱吗 编辑:程序博客网 时间:2024/05/22 10:56
4.2.5. 指针和const 限定符
1)指向const 对象的指针---核心意义:依此定义,不允许通过*此类型指针修改此对象的值
如果指针指向const 对象,则不允许用指针来改变其所指的 const 值。为了保证这个特性,C++ 语言强制要求指向 const 对象的指针也必须具有 const 特性:
const double *cptr; // cptr may point to a double that is const
remark:1. 指向const 对象的指针可以指向非const对象(允许把非 const 对象的地址赋给指向 const 对象的指针),但是无法通过此指针修改其所指向的非const对象的值。
原因:本质上来说,由于没有方法分辩 cptr 所指的对象是否为 const,系统会把它所指的所有对象都视为 const。
2.初始化问题:指向const 对象的指针定义时无需初始化。
原因:const 限定了cptr 指针所指向的对象类型,而并非 cptr 本身。也就是说,cptr 本身并不是const。在定义时不需要对它进行初始化,如果需要 的话,允许给 cptr 重新赋值,使其指向另一个 const 对象。
3.其他相关问题:const对象的地址赋给一个普通的、非 const 对象的指针也会导致编译时的错误。
此问题延伸问题:不能使用 void* 指针(第 4.2.2 节)保存 const 对象的地址,而必须使用 const void* 类型的指针保存 const 对象的地址。
如何理解(how to understand?):
不能保证指向 const 的指针所指对象的值一定不可修改。如果把指向 const 的指针理解为“自以为指向 const 的指针”,这可能会对理解有所帮助。
用途(apply):
在实际的程序中,指向 const 的指针常用作函数的形参。将形参定义为指向 const 的指针,以此确保传递给函数的实际对象在函数中不因为形参而被修改。
2)const 指针---核心意义:指针地址是常量(指针本身不能被修改)
与其他 const 量一样,const 指针的值不能修改,这就意味着不能使 curErr 指向其他对象。任何企图给 const 指针赋值的行为(即使给curErr 赋回同样的值)都会导致编译 时的错误;与任何 const 量一样,const 指针也必须在定义时初始化。
remark:1.初始化问题:因为定义的指针变量为常量,因此const 指针也必须在定义时初始化。
2. *pointer运算问题:可以通过此运算修改const指针所指向对象的值(取决于指向的对象类型)。指针本身是 const 的事实并没有说明是否能使用该指针修改它所指向对象的值。指针所指对象的值能否修改完全取决于该对象的类型。
3. const指针一经定义无法重新指向其他对象。
3)指向const 对象的 const 指针
还可以如下定义指向 const 对象的 const 指针:
const double pi = 3.14159; // pi_ptr is const and points to a const object
const double *const pi_ptr = π本例中,既不能修改 pi_ptr 所指向对象的值,也不允许修改该指针的指向(即 pi_ptr 中存放的地址值)。
- C++primer charpter 4笔记(一)
- 学习《c++primer》笔记一
- c++primer 笔记(一)
- 《C++Primer》 学习笔记一
- 一.c++primer学习笔记
- C++Primer 笔记(一)
- 《c primer plus》笔记<一>
- c++primer 4 笔记
- 《C++.Primer.Plus》学习笔记(一)
- C++Primer学习笔记一:快速入门
- C++primer学习笔记(一)
- C++Primer学习笔记(一)
- c++Primer笔记(一,二)
- 《C++Primer Plus》学习笔记(一)
- c++primer plus阅读笔记(一)
- C++primer学习笔记《4》
- C++Primer读书笔记(一)
- 【C++Primer】(一)
- 《go语言程序设计》第九章练习
- Highcharts中更新series的5种方法
- C++搜索与回溯算法之母亲的牛奶
- iOS-延时/定时总结(OC)
- Android动画总结系列(1)——帧动画
- C++primer charpter 4笔记(一)
- SOAP webserivce 和 RESTful webservice 对比及区别
- win10傻瓜式安装教程
- fastJson按照字符串顺序遍历JSON字段
- 买书
- Cygwin访问windows磁盘目录
- cef3加载flash闪烁问题非easyhook的另外一种解决方法
- Ubuntu下编译vlc for android
- Windows平台 Qt 5.9 VS2017 静态编译 包括OpenSSL、ICU