More Effective C++ 基础议题(条款1-4)总结 条款1:仔细区别pointers和references 如果有一个变量,其目的是用来指向(代表)另一个对象,但是也有可能它不指向(代表)这个变量,那么应该使用pointer,因为可将pointer设为null,反之设计不允许变量为null,那么使用reference 以下这是有害的行为,其结果不可预期(C++对此没有定义),编译器可以产生任何可能的输出 char *pc = 0; // 将 pointer 设定为null char…
条款1:区别指针和引用 条款2:最好使用C++转换操作符 条款3: 绝对不要以多态的方式处理数组 条款4: 避免无用的缺省构造函数 条款1:区别指针和引用 1.指针(pointer) 使用[*/->] 引用(reference) 使用[.] 2.a.引用没有null b.引用必须初始化 c.引用不可以被重新赋值 3.引用比指针的效率更高(其实只是更安全),引用不需要判定是否为null 总结: 指向不变用引用 条款2:最好使用C++转换操作符 C的强制转换是一定会实现,但是并不保证强转后的结果是否…
More Effective C++ #@author: gr #@date: 2015-05-11 #@email: forgerui@gmail.com 一.仔细区别pointers和references 1.1. 初始化 指针可以不初始化,引用必须初始化为. 引用没有null reference,指针可以设为NULL. //指针初始化为0,NULL,nullptr char *str = 0; int a = 1; //引用必须初始化,int &b;是错误的 int &b = a;…
1. 仔细区分 pointers 和 references references和pointers的差别描述如下: pointer:当需要考虑"不指向任何对象"时,或者是考虑"在不同时间指向不同对象"的能力时,应该采用pointer.前一种情况可以将pointer设为null,后一种可以改变pointer所指对象. reference:当确定"总是会代表某个对象",而且"一旦代表了该对象就不能再改变",那应该使用referen…
01:仔细区别 pointers 和 references 1:没有所谓的null reference,但是可以将 pointer 设为null.由于 reference 一定得代表某个对象,C++ 因此要求 references 必须有初值,但是pointers 就没有这样的限制. 没有所谓的 null reference 这个事实意味使用 references 可能会比使用 pointers更富效率.这是因为使用 reference 之前不需测试其有效性. 2:Pointers 和 refe…
引子: 阿里的一道题: #include <IOSTREAM> using namespace std; class A{ public: ) { cout<<"a~"<<val<<endl; } virtual void test() { func(); } }; class B: public A{ public: ) { cout<<"b~"<<val<<endl; } };…
成百上千的程序员都在向函数模板传递实参,并拿到了完全满意的结果,而这些程序员中却有很多对这些函数使用的型别是如何被推导出的过程连最模糊的描述都讲不出来. 但是当模板型别推导规则应用于auto语境时,它们不像应用于模板时那样符合直觉.所以了解作为auto基础的模板型别推导的方方面面就变得相当重要了. 本条款将说明这些推导过程.这里通过一段伪代码来说明,函数模板大致形如: template<typename T> void f(ParamType param); 而一次调用形如: f(expr);…
条款46请输入转换的时候,需要定义非模板成员函数 条款47请使用traits class表现类型信息 条款46:须要类型转换时请为模板定义非成员函数 条款 24提到过为什么non-member函数才有能力"在全部实參身上实施隐式类型转换".本条款接着那个Rational样例来讲.把Rational class模板化 template<typename T> class Rational{ public: Rational(const T& numerator=0,c…
Template metaprogramming(TMP,模板元编程)这是写template-based C++规划.编译过程.template metaprogramming随着C++写模板程序,化的过程.也就是说,TMP程序运行后,从templates详细化出来C++源代码.不再是模板了. TMP有两个作用,一是它让某些事更easy. 比如编写STL容器,使用模板,可是存放不论什么类型元素.二是将运行在运行期的某些工作转移到了编译期.另一个结果是使用TMP的C++程序可能在其它方面更高效:较…
32 : Make sure public inheritance models "is-a." 0 引言 Inheritance and Object-Oriented Design 从这一章开始,我们将阅读到有关程序设计的条款. 如果你之前是其他程序的编写者,要做好对C++特色OOP与众不同的准备.你将对OOP的概念产生变化. 1 public继承和is-a之间的等价关系 1.1 is-a的字面含义 子类对象 即 是一个 父类对象 derived class object IS A…