More Effective C++ 条款0,1

条款0

关于编译器

不同的编译器支持C++的特性能力不同。有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类型来模拟bool类型。这允许参数类型为intbool的函数重载,但是这样做的缺陷是,对于内置的比较运算符,其仍返回int类型。

f(int);f(bool); f(a < b); // 会调用f(int),但其实用户期望调用f(bool)

但是一旦改用支持bool类型的编译器,情况可能会发生改变。另外一种方法是typedef:

typedef int bool; const bool false = 0; const bool true = 1;

关于typedef的详细内容->typedef

条款1

指针和引用的区别

  • 首先引用必须指向一个对象,并且必须赋初值,但是指针可以为空。
  • 引用只能指向它最初指向的对象,不能更改。指针可以更改。
  • 引用不需要担心为空的情况,但是指针必须进行空指针的检查
  • 运算符重载函数,例如operator[],返回的一般是引用

    vector<int> v(5); v[1] = 1; 考虑如果返回是指针,则应该写成*(v[1])= 1;

结论

当你知道你需要指向某个东西,且绝不会改变,指向其他东西,或是当你实现一个操作符而其语法需求无法由pointers达成,你就应该选择引用。任何其他时候,请采用指针。

More Effective C++ 条款0,1的更多相关文章

  1. Effective Objective-C 2.0 学习记录

    由于最近入职,公司安排自由学习,于是有时间将Effective Objective-C 2.0一书学习了一遍.由于个人知识面较窄,对于书中有些内容无法理解透彻,现将所学所理解内容做一遍梳理,将个人认为 ...

  2. Effective Objective-C 2.0之Note.01

    1.在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类,并在实现文件中引入那些类的头文件.这样做可以尽量降低类之间的耦合(co ...

  3. Effective Objective-C 2.0 Reading Notes

    1. Literal Syntax NSString *someString = @"Effective Objective-C 2.0"; NSNumber *someNumbe ...

  4. [More Effective C++]条款22有关返回值优化的验证结果

    (这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...

  5. 《Effective Objective-C 2.0》 读后总结

    感觉自己最近提升很慢了.然后去找了一些面试题看看.发现自己自大了.在实际开发中,让我解决bug.编写功能,我有自信可以完成.但是对项目更深层的思考,我却没有.为了能进到自己的目标BAT.也为了让自己更 ...

  6. 《Effective Objective-C 2.0》摘要

    前一段时间将<Effective Objective-C 2.0>这本书浏览了一遍,说一下几个觉得比较有意思的知识点. 感觉这本书是ios开发必看的一本书,最基础的,以及稍微高阶一点的oc ...

  7. Effective ObjectiveC 2.0 Note

    [Effective ObjectiveC 2.0 Note] 1.The memory for objects is always allocated in heap space and never ...

  8. Effective Objective-C 2.0

    Effective Objective-C 2.0:编写高质量iOS与OS X代码的52个有效方法 作者:Matt Galloway(英) 译者:爱飞翔 出版社:机械工业出版社 出版年:2014-01 ...

  9. Effective C++ 条款45

    本节条款的题目是运用成员模板接受全部兼容类型 作者阐述自己的观点是通过智能指针的样例. 在学习本节条款之前我们要先明确关于隐式转化的问题 例如以下代码: #include<iostream> ...

随机推荐

  1. BZOJ2159 Crash的文明世界(树形dp+斯特林数)

    根据组合意义,有nk=ΣC(n,i)*i!*S(k,i) (i=0~k),即将k个有标号球放进n个有标号盒子的方案数=在n个盒子中选i个将k个有标号球放入并且每个盒子至少有一个球. 回到本题,可以令f ...

  2. window.onload和document.ready

    浏览器解析大致有以下几个步骤: (1)    解析HTML结构 (2)       加载外部脚本和样式 (3)       解析并执行脚本代码 (4)       构造HTML DOM 模型 (5)  ...

  3. MT【71】数列裂项放缩题

    已知${a_n}$满足$a_1=1,a_{n+1}=(1+\frac{1}{n^2+n})a_n.$证明:当$n\in N^+$时, $(1)a_{n+1}>a_n.(2)\frac{2n}{n ...

  4. List does not exist. The page you selected contains a list that does not exist. It may have been deleted by another user

    当我在subsite里点击"Add a document",报这个错,后来一看event log: 在AAM里加上一条: 问题搞定:

  5. 探测.yml

    liveness.yml #探测apiVersion: v1kind: Podmetadata: labels: test: liveness name: livenessspec: restartP ...

  6. numpy 从入门到遗忘

    不常用的函数总是遗忘,很是困扰啊.于是痛下时间,做一个系统的总结,纯原创,都是些实际项目中常用的函数和方法,当然还有一些这边也是没有记录的,因为我在实际数据处理过程中也没有遇到过(如字符串处理等等). ...

  7. 【BLUESKY的NOIp模拟赛】解题报告

     昨天晚上熬夜熬得有点严重,今天比赛的时候状态不好,成绩爆炸...  不得不说BLUESKY007 出的题还是相当不错的,也为我提醒了几个需要补的漏洞方向,这里作一下整理. \(Task 1\):探索 ...

  8. IDEA如何自动提示并补全syso和main呢?

    myeclipse使用若干年了,syso和main也被打过无数遍,切换到IDEA开发工具中,一按,天啦,竟然没有自动补全,顿时觉得IDEA弱爆了,经过摸索之后,IDEA终结没有令人失望.可以通过配置L ...

  9. css小笔记

    一.优先级 important>内联>id>class = 属性 = 伪类 >标签 = 伪元素 > 通配符(*) important声明 1,0,0,0 ID选择器 0, ...

  10. webserver apache 2.2.22-7/ apache webdav / redhat 6.3

    s 问题1:Failed to resolve server name for 10.24.41.161 (check DNS)   /   RedHat 6.3 64位系统 / apache htt ...