Effective C++ 随记 第一章(让自己习惯C++)

条款1:C++为一个语言联邦

1):C

2):Object-Oriented C++

3):Template C++

4):STL

 

内置函数类型时, pass-by-vale 通常比 pass-by-reference 高效;

用户自定义的构造、析构函数、template函数中 pass-by-reference-const 更高效。

 

请记住:

1):C++高效编程守则取决于你使用C++的哪一个部分。

 

条款2:尽量以const,enum,inline替换 #define

 

宏定义 #define 只是单纯的进行替换,不重视作用域,同时可能导致预期之外的错误:

1)

#define  pint int *;  // 宏定义类型的别名

pint a , b ; 

// 预期产生两个整形指针变量,实际上产生一个整形指针变量 a , 一个整形变量 b 。

2)

#define CALL_MAX(a , b)  f((a) > (b) ? (a) : (b))  // 宏定义带实参的函数

int a = 5, b = 0;

CALL_MAX(a , b); // 正确返回

CALL_MAX(++a, ++b);  // 错误返回,此类情况下,输出由输入参数决定

 

请记住:

1):单纯变量以const 对象 或者 enum 替换 #define

2):对于形似函数的宏,最好改用 inline 函数替换 #define

 

条款3:尽可能使用const

 

Const 用于修饰 global 或者 namespace 作用域的常量;

用于修饰文件、函数、区块作用域中声明为 static的 对象;

用于修饰 class 内的成员变量;

用于修饰指针、指针所指物等。

 

函数声明时,可以用 const 修饰: 函数返回值,参数、函数自身(类中的成员函数)。

成员函数的const版本和非const版本可以相互重载。

 

Static

变量

全局静态变量、局部静态变量

 

静态函数

本源文件的作用域

Inline 函数默认为静态函数

 

请记住:

1):声明 const 类型的对象、参数、函数返回类型、成员函数,可以帮助编译器侦测错误用法;

2):可以利用 non-const 成员函数调用 const 版本的成员函数避免代码重复

  

条款4:确定对象被使用前已经被初始化

 

请记住:

1):为内置对象进行手工初始化,C++不保证初始化他们

2):构造函数最好使用成员处置列实现初始化,不要再构造函数本体内使用赋值操作;

(本质上时初始化为空的对象,再对空对象赋值,成本增加)

处置列列出的成员变量次序应当与 它们在 class 中的声明次序相同。

3):为免除 跨编译单元的初始化次序 问题,用 local static 对象替换 non-local static 对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值