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 也是
上述两种写法意义一样。
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 也是
上述两种写法意义一样。
相关文章推荐
- C语言中extern的用法
- C++类型强制转换:static_cast const_cast reinterpret_cast dynamic_cast
- C++的类
- g++ -g -o testboost testboost.cpp
- c++ string和char* char[]的互转
- 计算程序运行的时间
- 10个经典的C语言小程序
- C++ - 非类型模板参数(nontype template parameters) 使用 及 代码
- C/C++ struct/class/union内存对齐
- c++输出对齐函数 setw()
- c++ static的作用,以及static对象在类和函数中区别
- C++新特性(function+bind)
- c++ operator 转换构造函数
- C++语言-04-重载
- RPC框架Thrift例子-PHP调用C++后端程序
- C++笔记:0
- C++界面库
- 1055. The World's Richest (25)
- C语言 一维数组叠加为二维数组样例
- c语言函数调用栈的变化