C++ FAQ学习笔记 18章 const正确性

[18.1] 什么是“const正确性”?

在这些函数中省去const,就是告诉编译器允许(但不强制)它们修改调用者的std::string对象。因此,这些g()函数可以把它们的std::string传递给任何f()函数,但只有f3()(通过传值接收参数)能够将其参数传递给g1()或g2()。如果f1()或f2()需要调用g()函数,必须给g()传递一份std::string的本地拷贝。f1()或f2()的参数不能直接传递给g()函数。

[18.2] “const正确性”是如何与普通的类型安全有何联系?

因为const变量缺少一些非const变量所具有的一些变更性操作

[18.4] “const Fred* p”是什么意思?

如果Fred类有一个非const成员函数mutate(),那么写p->mutate()就是个错误

[18.6] “const Fred& x”是什么意思?

意思是x是Fred对象的一个别名,但不能通过x来修改Fred对象。

[18.10] 什么是“const成员函数”?

另外一个对这种别名问题的(重要)认识是:用一根“指向const对象的指针”并不能保证对象不改变,它只是保证对象不会通过该指针被改变。

[18.11] 返回引用的成员函数和const成员函数之间有什么联系?

如果你通过引用返回的对象在逻辑上是this对象的一部分,而不管其是否在物理上放在了this 对象内,那么const方法应该返回const引用或直接按值返回

[18.12] “const重载”是做什么用的?

当一个查看函数和一个变更函数名字相同,且参数个数与类型也相同时就有用了——即两者的不同之处仅在于一个有const另一个没有const。下标运算符通常成对出现

[18.13] 如果我想让一个const成员函数对数据成员做“不可见”的修改,应该怎么办?

1.需要修改的数据成员应标记为mutable

2.如果编译器不支持mutable关键字,那么可以通过const_cast去除掉this的const, 但是最好该this对象本身定义时不是const对象

[18.15] 当我用const int*指向一个int后,为什么编译器还允许我修改这个int?

因为“const int* p”意思是“p保证不会修改*p”,而不是说“*p保证不变”。

[18.16] “const Fred* p”的意思是*p不会改变么?

同18.15

[18.17] 当把Foo**转换成const Foo**时为什么会出错?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值