让自己习惯c++

一:视c++为一个语言联邦

 c++是个多重范型编程语言,一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言;
 1. C:区块、语句、预处指针等来自于C。
 2.Object-oriented C++: class,封装、继承、多态等等 这部分是面向对象设计之古典守则在C++上最直接的实施。
 3.Template c++:这部分是C with class所求的。
 4.STL:stl是template程序库,它对容器、迭代器、算法、以及函数对象的规约有极大地紧密配合与协调,然而templates及程序库也可以其它想法建置出来。
C++高效编程守则视状况而变化,取决于你使用了C++的那一部分。

二:尽量以const、enum、inline代替 #define

class专属常量必须是class的一个成员,且保证在内存中只有一份应该声明为static。
#define不能创建一个class专属常量,#define不重视作用域,不具有任何封装性。
一个const的地址是合法的,一个enum的地址是不合法的。取一个defin的地址也是不合法的。
如果不想别人去的pointer或reference指向你的某个整数常量,可以使用enum实现这个约束。

! 对于单纯的常量,最好用const 对象或enum替换#define。
  对于形式函数的宏,最好改用inline的函数替换#define。

三:尽可能使用const

const出现在*号左边,表示被指物是常量;如果出现在*右边,表示指针自身为常量,如果出现在信号两边表示所指物与所指对象两者为常量。
声明迭代器为const就像声明指针为const一样(即声明一个T*类型的const指针),表示这个迭代器始终指向一个对象,但它所指对象的值可以改变。
如果你希望迭代器所指对象的值不能改变,你可以使用const_iterator。
将const实施与成员函数的目的是为了确保该成员可作用于const对象。
两个成语函数的const属性不同,可以被重载。
成员函数只有不更改对象的任何成员变量是才可以说是const,也就是说它不改变对象的内容。
将某些东西声明为const可以帮助编辑器检测出错误的语法。const可以施加于任何作用域类的对象,函数参数,函数返回类型,成员函数体。
    编译器强行实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)。
   当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码的重复。

四:确定对象被使用前以先被初始化

在某些平台上读取未初始化的值,就可以让你的程序终止运行。
对象的成员变量的初始化在进入构造函数之前,构造函数内不是初始化而是被赋值。
规定总是在初值列表中列出所有成员变量,以免还得记住哪些成员变量无需初值。
如果成员变量是const或references,它们一定需要初值,不能被赋值。
在拥有多个构造函数,每个函数都有自己的初始值列表的情况下,可以遗漏那些“赋值和初始化一样好”的成员变量改用赋值操作,并将它们封装成一个private的成员函数,供所有析构函数调用。
c++有着固定的成员函数初始化次序。base class早于其derived class被初始化,class成员变量总是以声明的顺序被初始化。
static对象其寿命从被构造出来直到程序结束为止。
!为内置类型对象进行手工初始化,因为c++不保证初始化它们
    构造函数最好使用成员初值列表,而不要在构造函数类使用赋值操作,初值列表列出的成员变量,其排列顺序应该和它们在class中声明次序相同。
    为免除“夸编译单元之初始化次序”问题,以local static对象替换non-local static对象。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值