notes of c++ primer (3) -- const的那些事
来源:互联网 发布:收据打印软件免费版 编辑:程序博客网 时间:2024/05/21 14:42
const类型限定修饰符,把一个对象转换成一个常量。因为常量在定以后就不能修改,所以必须被初始化。 pointer to constant
试图将一个非const对象的指针指向一个常量对象的动作都会引起编译错误。必须声明一个指向常量的指针来做这件事。
const double *cptr;
cptr是一个指向double类型const对象的指针,但cptr本身不是常量。我们可以重新赋值cptr,使其指向不同的对象,但不能修改cptr指向的对象。
const对象的地址只能赋给指向const对象的指针,但是指向const对象的指针可以赋予一个非const对象的地址。比如: 在实际应用中,指向const的指针常被用作函数的形参,用来保证传递给函数的实际参数在函数中不会被修改:
int strcmp(const char *str1, const char *str2);
const指针
const即指针值不能修改的指针。可以定义一个const指针指向一个const对象或者非const对象。
如下所示,pival是一个指向非const对象的const指针,不能赋予pival其它的地址值,但是可以修改其指向的值。
const引用
const引用可以用不同类型的对象初始化,也可以是不可寻址的值,比如文字常量; 同样的初始化对于非const引用是不合法的,将导致编译器错误。原因如下:
引用在内部存放的是一个对象的地址,它是该对象的别名。对于不可寻址的值如文字常量,以及不同类型的对象,编译器为了实现引用,必须生成一个临时对象,引用实际上指向改对象,但用户不能访问它。
如下代码: 其汇编代码如下: 从上可以看出,编译器为文字常量分配了内存,引用指向了该内存。
再比如: 编译器将其转换成: 如果我们给ri赋值,则这样不会改变dval,而是改变temp。对用户来说,就好像修改的动作没有生效。
const引用不会暴露这个问题,因为它们只只读的。不允许非const引用指向需要临时对象的对象或值。一般来说,这比“允许定义这样的引用,但实际上不会生效”的方案要好得多。
同样,也可使用将const引用指向非const对象。 与pointer to constant类似,此时不能通过i改变ival 的值
- notes of c++ primer (3) -- const的那些事
- C指针与const的那些事
- notes of c++ primer (1)
- notes of c++ primer (2)
- const的那些事
- C++ Primer notes
- C++Primer-- const
- C++ const的那些事
- notes of c++ primer (4) -- 纠结的虚函数表 之一
- notes of c++ primer (5) -- 纠结的虚函数表 之二
- C++Primer----顶层const和底层const
- const 引用(c++primer笔记)
- C++primer :const限定符
- C++ Primer 学习笔记与思考_8 指针和const的那些麻烦
- C++primer 4.2 指针和const限定符(3)
- 指针和const的那些事
- 指针和const的那些事
- const和指针的那些事
- 查找透明表的实用方法
- 网页程序--asp在线名片生成系统
- 兼容ie的标签写法
- 本人博客已转到流星小站 phpuni,大家多多光顾哦。
- 菜鸟飞翔篇-实时操作系统与分时操作系统
- notes of c++ primer (3) -- const的那些事
- 正则表达式
- 很美,你懂吗?
- Eclipse下J2ME开发环境的配置
- 利用临时文件恢复PowerPoint(PPT)文件
- 开发工具(转载)
- 创建oracle普通用户
- Checked Exception与Runtime Exception 的区别(转)
- SQL Server 排序实现函数细说