const用法一摘

上传人:飞*** 文档编号:53057699 上传时间:2018-08-27 格式:PDF 页数:3 大小:27.16KB
返回 下载 相关 举报
const用法一摘_第1页
第1页 / 共3页
const用法一摘_第2页
第2页 / 共3页
const用法一摘_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《const用法一摘》由会员分享,可在线阅读,更多相关《const用法一摘(3页珍藏版)》请在金锄头文库上搜索。

1、const 用法一摘const 引用是指向const 对象的引用const int ival=1024; const int /ok,both reference and object are const int /error! non const reference to a const object 可以读取但不能修改refVal,因此,任何对refVal的赋值都是不合法的。这个限制有其意义:不能直接对ival同值,因此不能通过使用refVal来修改 ival。同理, 用 ival初始化 ref2也是不合法的: ref2是普通的非const引用, 因此可以用来修改 ref2 指向的对象的值

2、。能过ref2对 ival赋值会导致修改const对象的值。为阻止这样的修改,需要规定将普通的引用绑定到const对象是不合法的。const 引用可以初始化为不同类型的对象或者初始化为右值,如字面值常量:int i=42; / legal for const reference ONLY! const int const int double dval=3.14; const int 编译器展开:int temp=dval; const int 非 const引用只能绑定到与该引用同类型的对象。const引用则可以绑定到不同但相关的类型的对象或绑定到右值。在 C+中真正的临时对象是看不见的,它

3、们不出现在你的源代码中。建立一个没有命名的非堆( non-heap)对象会产生临时对象。这种未命名的对象通常在两种条件下产生:为了使函数成功调用而进行隐式类型转换和函数返回对象时。理解如何和为什么建立这些临时对象是很重要的,因为构造和释放它们的开销对于程序的性能来说有着不可忽视的影响。首先考虑为使函数成功调用而建立临时对象这种情况。当传送给函数的对象类型与参数类型不匹配时会产生这种情况。在字符计数的例子里,能够成功传递char数组到 countChar中,但是在这里试图用char 数组调用upeercasify函数,则不会成功:。考虑一下这个函数:void uppercasify(string

4、 char subtleBookPlug = “Effective C+“; uppercasify(subtleBookPlug); / 错误 ! 没有为使调用成功而建立临时对象,为什么呢?假设建立一个临时对象,那么临时对象将被传递到upeercasify中,其会修改这个临时对象,把它的字符改成大写。但是对 subtleBookPlug函数调用的真正参数没有任何影响;仅仅改变了临时从subtleBookPlug生成的 string对象。无疑这不是程序员所希望的。程序员传递subtleBookPlug参数到 uppercasify函数中,期望修改subtleBookPlug 的值。当程序员期望

5、修改非临时对象时,对非常量引用(references-to-non-const )进行的隐式类型转换却修改临时对象。这就是为什么C+语言禁止为非常量引用(reference-to-non-const)产生临时对象。这样非常量引用(reference-to-non-const )参数就不会遇到这种问题。把一个 const对象的地址赋给一个普通的,非const对象的指针也会导致编译时错误:const double pi=3.14; double *ptr= /error:ptr is a plain pointer const double *cptr= /ok:cptr is a pointer

6、 to const 不能使用 void*指针保存const 对象的地址,而必须用const void*类型的指针保存。const int universe=42; const void *cpv= /ok; void *pv= /error:universe is const 允许把非 const 对象的地址赋给指向const 对象的指针 :double dval=3.14; cptr= typedef string *pstring; const pstring cstr; /cstr is a const pointer to string string *const cstr ; / equivalent to const pstring cstr; Sales_item成员函数形参表后面的const后面所起的作用: const 改变了隐含的this 形参的类型 。在调用total.same_isbn(trans)时,隐含的this形参将是一个指向total对象的const Sales_item *类型的指针。由于 this 是指向 const对象的指针,const 成员函数不能修改调用该函数的对象。const 对象,指向const对象的指针或引用只能用于调用其const成员函数,如果尝试用它们调用非const 成员函数 ,则是错误的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号