effective c++ 笔记 (1-3)
//
// effective c++.cpp
// 笔记
//
// Created by fam on 15/3/23.
//
//
//---------------------------15/03/23----------------------------
//#01 视c++为一个语言联邦
{
/*
1:c++如今支持的编程形式:
1:过程形式 2:面向对象形式 3:函数形式 4:泛型形式 5:元编程形式
2:c++的4个次语言:
1> c: 说到底c++还是以c为基础的。
2> object-oriented c++。也就是封装、继承、多态
3>template c++。泛型编程,他带来了一个崭新的编程范型,也就是模版元编程
4>STL。STL标准库。
*/
}
//#02 尽量以const,enum,inline替换 #define
{
/*
1:如果使用#define定义常量很可能找不到错误位置。此时用const来替换之,
使用const还有个好处是,不会出现多份字符常量。
关于const:
1>当要使用一个指向常量字符串的常量指针是,最好使用const string
使用 const std::string authorName("Scott Meyers");
替换掉 const char* const authorName ="Scott Meyers";
2>class的专属常量
class GamePlayer
{
private:
static const int NumTurns = 5;
int scores[NumTurns];
};
这里的NumTurns只是一个声明式,如果要取他的地址必须在之后给出定义:
const int GamePlayer::NumTurns;
2:如果编译器不支持以上的static const来做初值设定可以改用 enum
class GamePlayer
{
private:
enum{ NumTurns = 5 };
int scores[NumTurns];
};
关于enum:
1> enum的行为比较像#define,enum无法取地址
2> 纯粹的使用主义。enum是模版元编程的基础技术
3:使用inline来替换函数宏。又安全,又可以写出模版元编程
总结:对于常量,使用const enum来替换#define
对于形式函数的宏,使用inline来替换#define
*/
}
//#03 尽可能使用const
{
/*
1:const可以减少客户操作错误而造成意外,又不至于放弃安全性和高效性
很重要的一点关于+ - * /等运算符操作返回一个const类型是很好的选择
const Rational operator*(const Rational& lhs, const Rational& rhs);
可以避免一下的操作
Rtional a,b,c;
(a*b) = c;
2:const成员函数
将const实施于成员函数的目的,是为了确认该成员函数可作用于const对象身上。这类成员函数
重要的原因:
1>它们使class借口比较容易被理解。我们可以很容易地知道哪个函数可以改变对象内容,
哪个不行(这也是const成员函数的作用,加了const修饰符就表示不可修改)。
2>它们是的“操作const对象”成为可能。(当操作对象是const时优先调用const成员函数,相当于重载)
这是编写高效代码的关键,因为改善程序效率的根本办法是pass by reference-to-const
(也就是传入一个const修饰的引用)
关于下面的class
class TextBlock
{
public:
const char& operator[](std::size_t position) const
{ return text[position];}
char& operator[]((std::size_t position)
{ return text[position];}
private:
std::string text;
{;
const成员函数可以控制const对象operator[]操作返回的值是const属性的
TextBlock tb("Hello");
const TextBlock ctb("World");
tb[0]='x'; //对的,tb是non_const对象,调用non_const版本的成员函数,返回值可以赋值
ctb[0]='x'; //错,ctb时const对象 operator[]操作调用const成员函数
//返回const类型值所以无法完成赋值操作
如果去掉const成员函数,那么const类型的对象返回的也是
可以修改的返回值。
如果去掉non_const成员函数,那么不管是不是const类型的对象,返回的都是不能修改的
返回值.
*/
}
effective c++ 笔记 (1-3)的更多相关文章
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- [Effective JavaScript 笔记] 第4条:原始类型优于封闭对象
js有5种原始值类型:布尔值.数字.字符串.null和undefined. 用typeof检测一下: typeof true; //"boolean" typeof 2; //&q ...
- [Effective JavaScript 笔记] 第5条:避免对混合类型使用==运算符
“1.0e0”=={valueOf:function(){return true;}} 是值是多少? 这两个完全不同的值使用==运算符是相等的.为什么呢?请看<[Effective JavaSc ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
函数是一种将代码作为数据结构存储的便利方式,代码之后可以被执行.这使得富有表现力的高阶函数抽象如map和forEach成为可能.它也是js异步I/O方法的核心.与此同时,也可以将代码表示为字符串的形式 ...
- [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...
- java effective 读书笔记
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...
- Effective STL 笔记 -- Item 6 ~ 7: Container and Object Pointer
Effective STL 笔记 – Item 6 ~ 7: Container and Object Pointer 中间两次笔记被删掉了,简单补一下: Item 3 中提到如果将对象直接放入容器中 ...
- Item 5:那些被C++默默地声明和调用的函数 Effective C++笔记
Item 5: Know what functions C++ silently writes and calls 在C++中,编译器会自己主动生成一些你没有显式定义的函数,它们包含:构造函数.析构函 ...
随机推荐
- ajax status 错误
status **:未被始化 status **:请求收到,继续处理 status **:操作成功收到,分析.接受 status **:完成此请求必须进一步处理 status **:请求包含一个错误语 ...
- 【爬坑】Vim 文档加密 & 解密
0. 说明 在 Vim 使用过程中,最后保存的时候输入了 :X ,提示输入密码,输完密码发现以前没遇到类似情况. 有时候最后保存那会儿默认大写. 在网上一查发现原来给文件加密了,就顺带搜索怎么取消密 ...
- 浏览器加载和渲染html的顺序-css渲染效率的探究(转载)
1.浏览器加载和渲染html的顺序1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都 ...
- [LOJ 6030]「雅礼集训 2017 Day1」矩阵
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...
- MongoDB中_class字段的作用
我们知道,如果你用Java的Sping Data 框架映射Pojo为MongoDB数据时,数据库中会自动给你添加一个_class字段,那这个字段是干嘛用的呢?我们可以不可以不要这个字段呢? 直接上结论 ...
- jquery实现返回页面顶部功能。
<p id="back-to-top"> <span></span> </p> <script type="text ...
- 7、JVM--虚拟机类加载机制
7.1.概述 再类文件结构中 在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用. 而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机后会发生什么变化? ...
- dubbo接口访问控制
微服务背景下,一个web应用都可能不再service依赖,而是通过RPC调用远端服务器上的服务.这些服务里,就包括了一些不能轻易暴露的后台功能接口.暴露出去的dubbo接口注册到某一个zk上后,该du ...
- 十分钟教你使用NoteExpress
http://www.a-site.cn/article/761794.html 如果你正走在读研的路上,不管是什么专业,日常生活中都少不了读文献.读文献和读文献. 与其等到文献堆积如山,给阅读和使用 ...
- Leetcode——338. 比特位计数
题目描述:题目链接 对于求解一个十进制数转化为二进制时里面1的个数,可以先看一下概况: 十进制数 二进制数 1的个数 1 1 1 2 10 1 3 11 2 4 100 1 5 101 2 ...