Effective C 高阶笔记

简介: Part1一、让自己习惯C条款01:视C 为一个语言联邦C 并不是一个带有一组守则的一体语言:他是从四个次语言( C、Object-Oriented C 、Template、STL ) 组成的联邦政府,每个次语言都有自己的规约。记住这四个次于语言你就会发现C 容易了解得多。

Part1一、让自己习惯C
条款01:视C 为一个语言联邦
C 并不是一个带有一组守则的一体语言:他是从四个次语言( C、Object-Oriented C 、Template、STL ) 组成的联邦政府,每个次语言都有自己的规约。记住这四个次于语言你就会发现C 容易了解得多。

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

define ASPECT_RATIO 1.653

以上句为例,是通过预处理器处理而不是编译器处理,有可能ASPECT_RATIO 没进入记号表内,于是如果出现了编译错误,那么编译器会提示错误信息是 1.653 而不是 ASPECT_RATIO ,你会感到非常困惑。

解决方法是用常量替换宏

const double AspectRatio = 1.653

这样编译器就可以看到ASPECT_RATIO ,而且使用常量会使代码量较小,因为预处理器只会盲目的替换而出现多份 1.653

string对象通常比char* 更好一点

对于class的专属常量,为了限制作用域在class内,并且防止产生多个实体,最好使用static

如果你的编译器支持在类内对const static 整数类型声明时获初值,则使用

如果不支持,则在类内定义,在对应的实现文件中赋值

如果你需要在编译器就使用一个class常量值,则应最好改用枚举类型enum,且枚举不能用来取地址,不会为它分配额外的存储空间对于形似函数的宏,最好改用inline的模板函数

条款 03:尽可能使用const
const出现在星号左边目标是指物是常量,出现在星号右边表示指针本身是常量,如果出现在两边,则指针和物都是常量void f1(const Widget pw)和void f2(Widget const pw)两种写法意义相同,都表示被指物是常量 对于STL迭代器来说,如果你希望迭代器所指的动科不可改动,你需要的是const_iterator 令函数返回一个常量值,往往可以降低因客户错误而造成的意外(例如把一个值赋值给一个返回值) 将const实施与成员函数的目的是为了明确该成员函数可作用于const对象:

他们使class接口比较容易理解

他们使得可以操作const对象

const成员函数和no-const成员函数可重载,即可以同时出现,在传入不同的参数时候会调用不同的版本,但是有时我们需要这样,但是又不想代码重复,我们可以在no-const成员调用const成员函数来处理这个代码重复问题 例如:const_cast

相关文章
|
7月前
|
设计模式 安全 编译器
Effective C++55 笔记
Effective C++55 笔记
58 0
《More Effective C# 》读书笔记 第一章
《More Effective C# 》读书笔记 第一章
|
机器学习/深度学习 开发框架 编解码
动手学强化学习(三):动态规划算法 (Dynamic Programming)
动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略。
270 0
动手学强化学习(三):动态规划算法 (Dynamic Programming)
|
程序员 编译器 Serverless
【Effective C++详细总结】第四章 设计与声明
【Effective C++详细总结】第四章 设计与声明
122 0
|
C++ 索引
Effective C++ 英中简繁术语对照
Effective C++ 英中简繁术语对照
173 0
Effective C++ 英中简繁术语对照