计算机网站建设体会,建设银行昆山分行网站,广东网站建设费用,wordpress 网站访问认证页面多年前看过的这本书(侯捷翻译的)#xff0c;忘得差不多了#xff0c;重温复习一下。
1. 视C为一个语言联邦 C并不只是一个带有一组守则的一体语言#xff1b;它是从四个次语言组成的联邦(federation)政府#xff0c;每个次语言都有自己的规约。
次语言说明CC是C的基础忘得差不多了重温复习一下。
1. 视C为一个语言联邦 C并不只是一个带有一组守则的一体语言它是从四个次语言组成的联邦(federation)政府每个次语言都有自己的规约。
次语言说明CC是C的基础C对问题的解法其实是较高级的C解法Object-Oriented CC with classes面向对象设计的实施Template CC范型编程模板元编程TMPSTLtemplate程序库
2. 尽量以 const, enum, inline替换 #define #define的变量是由预处理器处理的编译器不知道它的存在。 2.1 对于单纯常量最好以const对象或enum替换#define。enum比较像#define取enum地址是不合法的建议优先使用。 2.2 对于形似函数的宏最好改用inline函数替换#define。inline函数遵守作用域和访问规则。
3. 尽可能使用const 将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。 3.1 如果关键字const出现在星号左边表示被指物是常量如果出现在星号右边表示指针本身是常量。 3.2 令函数返回一个常量值(常量对象)可以降低因客户错误而造成的意外而又保持安全性和高效性。 3.3 编译器强制实施物理常量性(bitwise constness)但编写程序时应该使用概念上的常量性即逻辑常量性。const成员函数承诺绝不改变其对象的逻辑状态。如果成员变量在const成员函数内总是可被更改的可以用mutable修饰。 3.4 当const和non-const成员函数有着实质等价的实现时另non-const版本调用const版本可以避免代码重复。先用static_cast将*this转为const对象调用const成员函数再用const_cast移除调用返回的const修饰。
4. 确定对象在使用前已被初始化 永远在使用对象之前先将它初始化。确保每一个构造函数都将对象的每一个成员初始化。 4.1 为内置型对象进行手工初始化因为C不保证初始化它们。这点和Java很不一样。 4.2 构造函数最好使用成员初始化列表而不要在构造函数体内使用赋值操作。class的成员变量总是以其声明的次序被初始化的。初始化列表列出的成员变量其顺序应该与它们在class中声明的次序相同避免使人迷惑。 4.3 为避免跨编译单元之初始化次序问题请用local static对象替换non-local static对象。 所谓编译单元是指产出单一目标文件的源码基本上是一个cpp文件加上其所包含的头文件。C对定义于不同编译单元内的non-local static对象的初始化顺序没有明确的定义。但是C保证函数内的local static对象会在该对象被调用期间首次遇上该对象定义式时被初始化。所以请优先使用局部静态对象函数而不是全局静态对象可以避免依赖的静态对象未被初始化的情况。