Effective C++ 学习笔记 第一章:让自己习惯 C++

本来看这本书已经好几天了,没准备做笔记,但看了几个条款,发现这本书总结的太好了,不记一下,回头忘了不好,如果对其他人有帮助就更好了。文章目录条款 01:让自己习惯 C++原文建议条款 02:尽量以const, enum, inline 替换 #define话题 1:用 const 和 enum 代替 #define 常量话题 2:用 inline 取代 #define 宏话题 3:#define 不等同于预处理操作原文建议条款 03:尽可能使用 const话题 1:const 修饰指针话题 2:con.
摘要由CSDN通过智能技术生成

第一章见 Effective C++ 学习笔记 第一章:让自己习惯 C++
第二章见 Effective C++ 学习笔记 第二章:构造、析构、赋值运算
第三章见 Effective C++ 学习笔记 第三章:资源管理
第四章见 Effective C++ 学习笔记 第四章:设计与声明
第五章见 Effective C++ 学习笔记 第五章:实现
第六章见 Effective C++ 学习笔记 第六章:继承与面向对象设计
第七章见 Effective C++ 学习笔记 第七章:模板与泛型编程
第八章见 Effective C++ 学习笔记 第八章:定制 new 和 delete
第九章见 Effective C++ 学习笔记 第九章:杂项讨论

本来看这本书已经好几天了,没准备做笔记,但看了几个条款,发现这本书总结的太好了,不记一下,回头忘了不好,如果对其他人有帮助就更好了。每个条款的内容是我自己理解的内容,最后的总结是摘抄自书中原文。

条款 01:让自己习惯 C++

Accustoming Yourself to C++.

C++是语言联邦,它综合了多种编程语言的特点,是多重范型编程语言(注意是范型,不是泛型),支持过程形式(procedural),面向对象形式(object-oriented),函数形式(functionnal),泛型形式(generic),元编程形式(meta programming)。

将 C++认为是多种次语言的结合,次语言有四种:

  • C 语言基础。C++最早出现时,从 C 中派生出来的那些特性。
  • Object-Oriented C++。也就是 C with classes,类,继承,多态,虚函数这些概念。
  • Template C++。C++的泛型编程,类和对象泛型化。
  • STL:最重要的模板库,提供容器、迭代器、算法和函数对象等。

在次语言之间切换工程,需要认真遵守当前次语言的规范。

总结

C++高效编程守则视状况而变化,取决于你使用 C++的哪一部分。

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

** Prefer consts, enums, and inlines to #defines.**

话题 1:用 const 和 enum 代替 #define 常量

#define 定义之下的标记不会经由编译器处理,记住这个道理,在编译器之前被预处理器处理了,所以 #define 引入的问题,编译器很难查出来。使用 const 代替 #define 来定义常量,编译器可以帮助检查如类型错误这一类问题。

const 作用于指针,分为作用到指针指向对象的不变性和指针本身的不变性。

以下代码定义了一个类内的类静态常量成员(类专属常量成员):

class Game {
   
private:
    static const int NumTurns = 5;    // 注意这是声明,因为是常量,必须这里赋值,有关于为什么声明时可赋值,接下来会介绍
    int scores[NumTurns];             // 可直接使用该常量
}

如果是类静态整形常量成员,C++ 要求如果你要取 NumTurns 的地址,或者编译器要查看,那必须为其提供一个定义式,放到实现文件中:

const int Game::NumTurns;            // 这是定义,因为声明时已指定常量值,这里不能再指定一次

现代编译器允许对类静态整形常量成员在声明时指定常量值。

对于非整数的其他类静态常量成员,无法在声明中指定常量值,这时可通过定义指定常量(前者在声明时指定常量,是为了能在后续的其他声明时用,比如 scores 数组长度)。

书中还给出了补偿做法。如果编译器不允许在声明时指定常量值,可采用 enum 方式:

class Game {
   
private:
    enum {
    NumTurns = 5 };          // 这个叫 enum hack
    int scores[NumTurns];

enum 无法取地址,所

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值