一、让自己习惯C++


01.视C++为一个语言联邦

c++是多重范型编程

语言,视c++包括4种次语言:

1:C

2:Object-Oreinted C++;

3:Template C++;

4:STL(template程序库,包括容器、迭代器、算法和函数对象)。

02.尽量以const,enum,inline替换#define

const:

定义常量指针,定义class专属常量

用#define直接替换导致名称从未被编译器看到,可能一些错误信息不能被检查出来。

const定义常量也可能比#define导致较小量的码

#define不重视作用域,故不提供封装性

enum:

取一个const的地址是合法的,但取一个enum的地址不合法

inline:

#define定义函数可能招致误用,最好用inline函数替换

注:

对于单纯常量,最好以const对象或enums替换#defines;

对于形似函数的宏,最好改用inline函数替换#defines。

03.尽可能使用const

令函数返回一个常量值,可以预防无意义的赋值动作

普通const

如果关键字const出现在星号左边,表示被指物是常量;如果出现在右边,表示指针自身是常量;如果出现在星号两边,表示两者都是常量。

Const 成员函数

1.使得 class接口容易被理解,得知哪个函数可以改动对象内容,而哪个不行。

2.使得操作const对象成为可能(pass-by-reference-to-const)

3.const对象只能访问const成员函数,而非const对象可以访问任意的成员函数

4.const成员函数不能修改对象的数据成员,const对象的成员变量不可以修改(mutable修饰的数据成员除外)

Non-const和const成员函数中避免重复

Const成员函数调用non-const成员函数是错误行为,但non-const成员函数可以调用const成员函数,可避免代码重复。

注:

两个成员函数如果只是常量性不同,是可以被重载的。

将某些东西声明为const可帮助编译器侦测出错误用法。Const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。

当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本避免代码重复。

04.确定对象被使用前已被初始化

  1. 为内置型对象进行手工初始化;内置类型以外,构造函数负责初始化责任
  2. 不要混淆赋值于初始化。
  3. 对于构造函。数初始化,最好使用成员初值列初始化,这样有时候绝对必要,往往比赋值高效。初值列列出的成员变量,其排列次序应与他们在class中的声明次序相同。

因为赋值操作会多出一个default构造函数先对内部成员变量赋初值,然后再立即赋值,使用成员初值列替换赋值动作会更高效。

4. 不同编译单元的non-local static对象初始化相对次序并无明确定义,将每个non-local static对象搬到自己的专属函数对象里(该对象在此函数内被声明为static),以local对象替换。原因在于C++保证,函数内的local static对象会在该函数被调用期间首次遇上该对象定义式时被初始化。

最新文章

  1. JSON&XML总结
  2. iOS里防止按钮被多次点击的办法
  3. MontageJS:构建现代 Web App 的 HTML5 框架
  4. python 练习 2
  5. struts2 <s:iterator> status属性
  6. du 命令,对文件和目录磁盘使用的空间的查看
  7. 【干货】国外程序员整理的 C++ 资源大全
  8. XML基础概念
  9. sql查询结果集根据指定条件排序的方法
  10. MVC4.0系统开发新手历程(二)
  11. 疯狂JAVA讲义第三章之数组篇
  12. map中结构体做关键字的注意事项
  13. Java第五周学习总结
  14. 从 Basic Paxos 到 Multi Paxos 到 Raft
  15. Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)
  16. ORA-16019搭建DG设置归档线程参数报错
  17. Spring框架管理开源的连接池
  18. 解题:JSOI 2016 最佳团体
  19. Winform控件:保存文件对话框(SaveFileDialog)
  20. 解析oracle的rownum

热门文章

  1. python基础知识三——try与except处理异常语句
  2. 树莓派3B上手一二
  3. 题解 [HNOI2016]大数
  4. 不会SQL也能做数据分析?浅谈语义解析领域的机会与挑战
  5. 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符
  6. 康托展开+逆展开(Cantor expension)详解+优化
  7. Java:死锁编码及定位分析
  8. [技术博客]Django框架-后端的搭建
  9. Noip模拟45 2021.8.21
  10. Nginx(三):Linux环境(Ubuntu)下Nginx的安装