您的位置:首页 > 编程语言 > C语言/C++

Effective c++ 读书笔记

2016-02-26 11:00 246 查看
1.

class Widget

{

public:

Widget();//default构造函数

Widget( constWidget& rhs );//copy构造函数

Widget& operator=( constWidget& rhs);//copy assignment 操作符

...

};

Widget w1;//调用default构造函数

Widget w2(w1);//调用copy构造函数

w1 = w2;//调用copy assignment 操作符

当你看到赋值符号时请小心,因为“=”语法也用来调用copy构造函数

Widget w3 = w2;//调用copy构造函数

“copy构造” 很容易和“copy赋值”有所区别。如果一个新对象被定义(如以上语句中的w3)

, 一定会有个构造函数被调用,不可能调用赋值操作。如果没有新对象被定义

(如上述的“w1 = w2”语句),就不会有构造函数被调用,那么当然就是赋值操作被调用。

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

四个次语言:

* C;说到底C++仍是以C为基础

* Object-Oriented C++;这也是C with classes 所诉求的

* Template C++;这是C++泛型编程的部分

* STL; STL是个Template程序库

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

这个条款或许改为“宁可以编译器替换预编译器”比较好。

记住:

* 对于单纯常量,最好以const对象或enum替换#define

* 对于形似函数的宏(macro),最好改用inline函数替换#define

条款3: 尽可能使用const

const指定 一个“不该被改动的”对象,编译器会强制实施这项约束。

char* p = greeting;
//non_const pointer, non_const data

const char* p = greeting;
//non_const pointer, const data

char* const p = greeting;
//const pointer, non_const data

const char* const p = greeting;
//const pointer, const data

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

如果出现在星号两边,表示被指物和指针两者都是常量。

void f1(const Widget* pw);
//f1获得一个指针,指向一个常量(不变的)Widget对象

void f2(Widget const * p2);
//f2 也是

上述两种写法意义一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: