《Effective C++第三版》读书笔记——让自己习惯C++
来源:互联网 发布:js控制视频播放 编辑:程序博客网 时间:2024/06/07 12:34
1 让自己习惯C++
~~~~~~~~~~~~~~~~
1.1 尽量以const,enum,inline替换#define
=========================================
1. 用宏写出的函数,最好用template inline函数代替
1.2 尽可能用const
==================
1. 如果关键字const出现在*左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量
2. const iterator就像声明指针为const一样(T* const),表示这个迭代器不得指向不同的东西,但它所指的东西的值可以改变.
如果希望迭代器所指的东西不可变动(模拟const T*),需要从const_iterator
3. 令函数返回一个const值,可以防止对返回值进行赋值
4. 两个成员函数如果只是常量性不同,可以被重载
- class A
- {
- public:
- char str[100];
- char& tb(int i){return str[i];}
- const char& tb(int i) const {return str[i];}
- }
5. 编译器强制实现bitwise constness,但编写程序时应该使用概念上的常量性(conceptual constness).
这时可以用mutable关键字释放掉non-static成员变量的bitwise constness约束
6. 当const和non-const成员函数实质上等价的实现时,可以令non-const版本函数调用const版本函数,而不能反过来.(因为承诺不改动对象的const函数调用可能改动对象的non-const函数,是错误的)
- class A
- {
- public:
- char str[100];
- const char& tb(int i) const {return str[i];}
- char& tb(int i)
- {
- return const_cast<char&>( //将const函数的返回值const移除
- static_cast<const TextBlock&>(*this) //为*this加上const,强迫调用的是const版本的函数
- .tb(i); //调用tb方法
- }
- }
1.3 确定对象被使用前已经先被初始化
===================================
1. 如果某编译单元内的某个non-local static对象的初始化动作用到了另一个编译单元的某个non-local static对象,它所用到的这个对象可能尚未初始化,因为C++对定义于不同编译单元内部的non-local static对象的初始化次序无明确定义.
可以将non-local static对象搬到一个函数内成为local static对象,并让该函数返回一个reference指向该对象(类似与Singleton模式),这样就能保证对象初始化了
本文出自 “暗日” 博客,请务必保留此出处http://darksun.blog.51cto.com/3874064/1144739
- 【读书笔记】Effective C++-1 让自己习惯C++(之一)
- 【读书笔记】Effective C++-1 让自己习惯C++(之二)
- 【读书笔记】Effective C++-1 让自己习惯C++(之三)
- 《Effective C++第三版》读书笔记——让自己习惯C++
- Effective C++读书笔记1(让自己习惯C++)
- Effective C++读书笔记1(让自己习惯C++)
- 《Effective C++》 读书笔记(一) 让自己习惯C++
- <<Effective C++>>读书笔记1: 让自己习惯C++
- Effective C++ — 让自己习惯C++(一)
- Effective C++(一)让自己习惯C++
- Effective C++(一)让自己习惯C++
- effective c++-让自己习惯c++
- 《Effective C++》第一章:让自己习惯C++
- 《Effective C++》1-让自己习惯C++
- 《Effective C++(第三版)》读书笔记
- 《Effective C++》让自己习惯C++:条款1-条款4
- Effective C++读书笔记---让自己习惯C++
- Effective C++(一)让自己习惯C++
- lua语言学习笔记
- C语言学习——宏
- Emacs学习笔记
- GNU make笔记
- 什么样的类可以作为map的键值
- 《Effective C++第三版》读书笔记——让自己习惯C++
- 《Effective C++第三版》读书笔记——构造/析构/赋值运算
- 《Effective C++第三版》读书笔记——资源管理
- 《Effective C++第三版》读书笔记——设计与声明
- 自我实现简易的智能指针
- 《Effective C++第三版》读书笔记——实现
- 14443协议的一些小的问题集锦
- 《Effective C++第三版》读书笔记——设计与面向对象设计
- 《Effective C++第三版》读书笔记——定制new和delete