1,让自己习惯C++
来源:互联网 发布:godaddy和阿里云 编辑:程序博客网 时间:2024/06/05 11:00
条款01:视 C++ 为一个联邦语言
可将 C++ 分为四个部分:
1,C C 部分
2,Object-Oriented C++ 面向对象部分
封装,继承,多态,virtual 函数,等等
3,Template C++ C++ 模板部分
4,STL 标准模板库部分
容器,算法,迭代器,函数对象,等
——————————————————————————————————————————————
条款02:尽量以 const, enum, inline 替换 #define
// 如:#define A 1.65 //记号 A 也许从为被编译器看见,于是记号 A 有可能没进入符号表,当发生某些错误时,不易找到错误的所在//所以应该用以下形式const double A = 1.65 ; //这时 A 肯定能被编译器看见,也能进入符号表//第一种情况//当在头文件中定义字符串常量时,有必要写成下面形式const char * const Name = "abc";//因在 C++ 中,string 类 比 char * 更好 ,所以可以写成下面形式const std::string Name("abc");//第二种情况//class 专属常量,为了让常量的作用域限制在类内,必须将它声明为一个成员,为确保此常量只有一份实体,必须声明为 static 成员class A{ static const int A_a ; //这里只可声明,不可赋初值 int num[A_a]; //使用该常量}const int A::A_a = 5; //在实现文件内定义 class 的 static 常量成员//也可以使用 enum, 如下class A{ private: enum { A_a = 5 }; //A_a成为 5 的一个记号名称 int num[A_a]; //使用 A_a}
*对于单纯常量,最好以 const 对象或 enum 替代 #define
*对于形似函数的宏,最好用 inline 函数来替换 #define
——————————————————————————————————————————————————————————————————
条款03:尽可能使用 const
const 允许指定一个语句约束,它告诉编译器和其他程序员某只应该保持不变。
// 多才多艺的 constchar greeting[] = "Hello" ;char *p = greeting; //non-const pointer,non-const dataconst char *p = greeting; //non-const pointer,const datachar const *p = greeting; //non-const pointer,const datachar * const p = greeting; //const pointer, non-const dataconst char * const p = greeting; //const pointer,const datachar const * const p = greeting; //const pointer,const dataconst 用于迭代器的情况如下:
//std::vector<int> vec;const std::vector<int>::interator iter = vec.begin(); //指针不变*iter = 10; //没问题iter++; //错——————————————————————————————————std::vector<int>::const_interator iter = vec.begin(); //指针指向的内容不变*iter = 10; //错iter++; //没问题const 用于函数的情况
//重载运算符时,返回 const 类型class A{};const A operator*(const A &lhs, const A &rhs); //可防止这种情况:if (a * b = c),此时编译器会报错 //而我们的本意是:if (a * b == c)const 成员函数
//const 成员函数的两个好处://1,使class接口比较容易理解,可让我们得知那个函数可以改变对象,哪个函数不可以//2,可以操作 const 对象条款04:确定对象在被使用前已被初始化
//对于内置数据类型,必须手工初始化,如:int i = 10;const char *p = "hello";————————————————————————————————————————————————//对于类,初始化落在构造函数身上//所以要确保每一个构造函数都将对象的每一个成员初始化//重要的是不要混淆了赋值和初始化对于大多数类而言,比起先调用default构造函数然后再调用copy assignment 操作符,单只调用一次copy构造函数式比教高效的,有时候高效的多,
所以在编写累的构造函数时,最好使用成员初始化列表的方式,而不写在构造函数的函数体内,这样效率更高。
若成员变量是 const 或 引用就必须使用初始化成员列表
规则:任何时候都使用初始化成员列表,不再构造函数的函数体内赋初值!!
C++有着十分固定的“成员初始化次序”,base_classes 要早于derived_classes 被初始化,而class的成员变量,总是以其声明的次序被初始化。
---static 对象
所谓 static 对象,其寿命从被构造出来到程序结束为止。这种对象包括:
1,global 对象
2,定义域namespace 作用域内的对象
3,在class内,以及函数内,和 file 文件作用域内的被声明为 static 的对象。
程序结束时,他们会被他们的析构函数销毁。
为避免“跨编译单元之初始化次序”的问题,请以local static 对象替换non-local static 对象。
- 《Effective C++》1-让自己习惯C++
- 【读书笔记】Effective C++-1 让自己习惯C++(之一)
- 【读书笔记】Effective C++-1 让自己习惯C++(之二)
- 【读书笔记】Effective C++-1 让自己习惯C++(之三)
- 《Effective C++》让自己习惯C++:条款1-条款4
- Effective C++读书笔记1(让自己习惯C++)
- Effective C++读书笔记1(让自己习惯C++)
- <<Effective C++>>读书笔记1: 让自己习惯C++
- 1,让自己习惯C++
- 1、让自己习惯c++
- 1 让自己习惯C++
- 1 让自己习惯C++
- Effective C++(一)让自己习惯C++
- Effective C++(一)让自己习惯C++
- effective c++-让自己习惯c++
- 《Effective C++》第一章:让自己习惯C++
- 如何写出高效C++(让自己习惯C++)
- Effective C++ --1 让自己习惯C++
- cheap louis vuitton outlet
- Netty Channel 接口名词理解
- 香奈儿 XEQp FRd oTn5z
- Android项目中,在一个数据库里建立多张表
- ray ban官網 8CY1 Fyz fLF3S
- 1,让自己习惯C++
- h264 流、帧结构
- 紐巴倫專賣 SNog 15I ANEoZ
- Linux at命令的使用
- Shader
- R - 修改plot字体,嵌入字体到pdf
- MFC控件:listctrl使用方法总结
- 别的程序员是怎么读你的简历的
- 设计模式——解释器设计模式