标签:const Effective C++ 笔记 int ArraySize class define
前言
此书由Scott Meyers所著,侯捷所译,乃经典中的经典,十分值得多刷。此文旨在记录书籍重点内容,并附上个人调试与理解
原书中含有较多译者未予翻译的英文词条,这里给出大致参照
英文词条 | 中文翻译 | 英文词条 | 中文翻译 |
---|---|---|---|
const | 常量 | non-const | 非常量 |
static | 静态 | non-static | 非静态 |
heap | 堆区 | stack | 栈区 |
by value | (以)值(的方式) | by reference | (以)引用(的方式) |
base class | 基类(父类) | derived class | 派生类(子类) |
一.让自己习惯C++
条款01:视C++为一个语言联邦
View C++ as a federation of languages
在C++诞生初期,它的名称为C with Classes,可以视作它只是C加上一些面向对象的特性。但随着C++的逐渐发展,已经逐渐演变为一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言。总的来说我们应将C++视作一个语言联邦,分为以下四种
- C:内置数据类型,数组,指针,语句...等等统统来自C语言
- Object-Oriented C++:最初的C with Classes,包含了类,封装,继承,动态绑定...等等面向对象的设计
- Template C++:模板,泛型编程
- STL:一个template程序库,涵盖了容器,迭代器,算法与函数对象
条款02:尽量以const,enum,inline替换#define
Prefer consts, enums, and inlines to #define
传统艺能,在C风格的数据结构训练中,我们常用以下几种宏定义
#define ERROR -1
#define FALSE 0
#define OK 1
由于各种不可抗力,可能导致ERROR,FALSE等在编译器开始处理源码之前就被从预处理器上移除了,并没有进入到记号表中,使后续的代码错误信息可能指出错误来自于“-1”或是“0”而非ERROR或是FALSE。哦!这糟糕的代码将让您一头雾水!
正如条款所说的,尽量以const替换#define
const int Error = -1; //全大写风格一般用于宏
另一种情况,由于编译器认为必须在编译期间便知道数组的大小,故在构建中传入变量或是non-static的常量均是不合法的,下面以一个类成员作示范
#define ARRAYSIZE 10
class GamePlayer {
private:
int scores[ARRAYSIZE]; //传统做法
static const int ArraySize = 10; //ArraySize常量声明式
int scoresBetter[ArraySize]; //优化做法
};
//const int GamePlayer::ArraySize; //部分编译器可能仍需要你写出这行代码
//无需也不能够赋初值,原因:为const常量
众所周知,若要在类内写一个静态成员变量,需要在类内声明,然后再在类外实现。但对于整数类型(例如int,char,bool)来说,编译器可以对其做出特殊处理,也就是 “in-class初值设定”。但若对于float亦或是double类型的变量,就需要走老路子了
class CostEstimate {
private:
static const double FudgeFactor; //该类一般写在头文件中 CostEstimate.h
};
const double CostEstimate::FudgeFactor = 1.23; //该定义式写在实现文件中 CostEstimate.cpp
上述例子中对ArraySize的初始化被称为 “in-class初值设定”,若某些编译器不支持此种做法,那么你需要在类外书写ArraySize常量定义式,就像下面这样
标签:const,Effective,C++,笔记,int,ArraySize,class,define 来源: https://www.cnblogs.com/tuapu/p/14022510.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。