《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记

简介: 《Effective C++ 改善程序与设计的55个具体做法》 第一章 笔记

1 让自己习惯C++


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

       View C++ as a federation of languages.


“C++的语法多样复杂,简单来看,可以把它看成4种语言(C、面向对象、Tempate(模板)、STL(标准库)。”


C。 C是C++的基础,C++的区块、语句、预处理器、内置内置数据类型、数组、指针都来自于C。

Object-Oriented C++。这部分是C with classes所诉求的:classes、封装、继承、多态、virtual……

Template C++。 C++的泛型编程(generic programming)部分

STL。 STL是个template库。


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

        Prefer consts,enums,and inlines to #defines


“对于单纯常量,最好用const或enum ;

对于形似函数的宏,建议用inline函数”


例如:#define ASPECT_RATIO 1.653 改为 const double AspectRatio = 1.653;

      class专属常量。

             class GamePlayer {

                    private:

                           static const int NumTurns = 6;

                           int scores[NumTurns];

                          …};


如果编译器不允许这种做法,可改用the enum hack做法:

             class GamePlayer {

                    private:

                           enum{NumTurns = 5};

                           int scores[NumTurns];

                          …};


条款03:尽可能使用const

        Use const whenever possible

“如果一个东西应该是const的,就尽量用const限制。”


1、关键字const出现在星号*左边,表示被指物是常量,星号*出现在右边,表示指针自身是常量。

2、令函数返回一个常量值,可以避免一些错误操作。

例如:

class Rational {…};

const Rational operator* (const Rational & lhs,const Rational& rhs);

这样当出现

Rational a,b,c;

(a*b)= c;    这种错误操作就会报错。

3、const成员函数


条款04:确定对象被使用前已先被初始化

        Make sure that objects are initialized before they’re used

“永远在使用对象前将其初始化,对于无任何成员的内置类型,你必须手工初始化。”


int x = 0;

const char * text = “A C-style string”;

double d; std::cin>>d;

对于内置类型以外的东西,初始化需要在构造函数(constructors)的成员初始化列表中进行。

ABEntry::ABEntry(const std::string &name, const std::string&address)

:theName(name),theAddress(address) {}


相关文章
|
3月前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
43 0
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
99 21
|
2月前
|
C++
【C++基础】程序流程结构详解
这篇文章详细介绍了C++中程序流程的三种基本结构:顺序结构、选择结构和循环结构,包括if语句、三目运算符、switch语句、while循环、do…while循环、for循环以及跳转语句break、continue和goto的使用和示例。
45 2
|
3月前
|
C++ 容器
【C/C++笔记】迭代器
【C/C++笔记】迭代器
25 1
|
3月前
|
PHP C++ Python
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
右手坐标系,空间点绕轴旋转公式&程序(Python和C++程序)
62 0
|
3月前
|
存储 安全 程序员
【C/C++笔记】迭代器范围
【C/C++笔记】迭代器范围
65 0
|
3月前
|
C++
c++学习笔记03 程序流程结构
C++学习笔记,主要介绍了程序流程结构,包括顺序结构、选择结构和循环结构。选择结构中详细解释了if语句、三目运算符和switch语句的用法和注意事项。循环结构部分则涵盖了while循环、do-while循环和for循环的语法和使用技巧。此外,还介绍了跳转语句,包括break、continue和goto语句的用途和用法。
35 0
|
4月前
|
C++ Windows
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
在Windows上使用Visual Studio 2022进行FFmpeg和SDL2集成开发,首先安装FFmpeg至E:\msys64\usr\local\ffmpeg,然后新建C++控制台项目。在项目属性中,添加FFmpeg和SDL2的头文件及库文件目录。接着配置链接器的附加依赖项,包括多个FFmpeg及SDL2的lib文件。在代码中引入FFmpeg的`av_log`函数输出"Hello World",编译并运行,若看到"Hello World",即表示集成成功。详细步骤可参考《FFmpeg开发实战:从零基础到短视频上线》。
151 0
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
|
5月前
|
C语言 图形学 C++