C++ FAQ学习笔记 18章 const正确性
2013-08-28 23:53
288 查看
[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.需要修改的数据成员应标记为mutable2.如果编译器不支持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**时为什么会出错?
相关文章推荐
- C++ FAQ学习笔记 18章 继承
- Effective C++ 学习笔记 01 const关键字
- Effective C++ 学习笔记(1) : 语言联邦、弱化预编译器、const、初始化
- C++ FAQ学习笔记 9,10章
- C++ FAQ学习笔记 23章 继承 — 你所不知道的
- C++学习笔记(3):const与&修饰函数形参的作用
- C++ Primer Plus学习笔记之const修饰指针
- C++ FAQ学习笔记 11 章 析构函数
- 4000 C++中进化后的const(学习笔记)
- C/C++学习笔记之const的学习
- C++学习笔记:friend ostream &operator<<(ostream &stream, const Date& dt);
- C++学习笔记1——const
- c++学习笔记-------const限定修饰符和引用
- C++ FAQ学习笔记 12 章 赋值算符
- C++ FAQ学习笔记 20章 继承-虚函数
- C++学习笔记--再谈const和引用
- 学习C++笔记(引用、const、iterator)
- C++ FAQ学习笔记 24章 继承 — 私有继承和保护继承
- C/C++学习笔记6:const运用(1)
- 【C++学习笔记】由 const char* 引出的一系列问题