1)default constructor:在没有任何外来信息的情况下将对象初始化 2)但是有些对象如果没有外来信息,就没有办法完成初始化动作,那么这些对象,就没有必要提供default constructor 3)如果一个类缺乏default constructor,那么使用这个类的时候会存在一定的限制 限制1:产生数组的时候,没有任何一个方法可以为数组中的对象指定constructor自变量. EquipmentPiece bestPieces[];//错误! EquipmentPiece…
1.default 构造方法意味着,没有外来信息的情况下,进行初始化,构造出一个对象.对于有些对象是很合理的,比如数值之类的对象,可以初始化为0:对于指针之类的对象,初始化为null:对于集合如vector,list,可以初始化为一个空容器. 2.对于有些对象,必须要有外来信息,才能构造出一个有意义的对象.比如Person,要有name才能构造出一个有意义的Person对象. 3.因此,对于没有外来信息,也能合理构造出一个对象的类,必须提供default 构造方法.对于没有外来信息,不能构造出一…
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回值的返回方式上,大师Meyers推荐使用表达式[returnT(lhs)+=rhs;]这种使用匿名临时变量的方式,理由是“自古以来未具名对象总是比具名对象更容易被消除”,这种写法将更好地帮助编译器实现返回值优化(ReturnValue Optimization,简写RVO). 针对上述说法,我在两款…
More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类型来模拟bool类型.这允许参数类型为int和bool的函数重载,但是这样做的缺陷是,对于内置的比较运算符,其仍返回int类型. f(int);f(bool); f(a < b); // 会调用f(int),但其实用户期望调用f(bool). 但是一旦改用支持bool类型的编译器,情况可能会发生改变…
/************************************************************************/ /* 模块名:ConsoleAdapter 文件名:ConsoleAdapter.h 功 能:为非控制台程序提供控制台输出窗口 参 考: 1. http://www.codeproject.com/Articles/15836/Writing-to-and-read-from-the-console-From-a-GUI-ap ----------…
1.别让异常逃离析构函数的原因 <Effective C++>第三版中条款08建议不要在析构函数中抛出异常,原因是C++异常机制不能同时处理两个或两个以上的异常.多个异常同时存在的情况下,程序若不结束,会导致不明确行为.如下代码: class Widget{ public: ~Widget(){...} //假设这个可能吐出一个异常 }; void dosomething(){ vector<Widget> v; } //v在这里被自动销毁 函数dosomething运行结束后,最…
本节条款的题目是运用成员模板接受全部兼容类型 作者阐述自己的观点是通过智能指针的样例. 在学习本节条款之前我们要先明确关于隐式转化的问题 例如以下代码: #include<iostream> using namespace std; class A { public: explicit A(int i):a(i){}; A(const A&obj):a(obj.a) { } private: int a; }; int main() { int value =0; A a = valu…
本节条款的标题是:将与參数无关的代码抽离templates 学习本节条款首先须要明确一件事情,那就是模板实例化的过程会不会反复? 我们来举个样例: #include<iostream> using namespace std; template <typename T> T Try(T m) { return m; } int main() { Try(10); Try(1); } 我们看以上简单的代码.每一个人都知道模板被调用了两次,是的,这显而易见.但是模板也被实例化了两次吗?…
本节条款:须要类型转换时请为模板定义非成员函数 这节知识是在条款24的基础上,讲述的有关非成员函数在模板类中(non-member function template)的作用. 我们先看一下条款24讲述的知识核心.条款24讲述了我们怎样能实现类的对象在特定条件下的隐式转换问题. 我们先看以下代码: ** 例一: ** #include<iostream> #include<assert.h> using namespace std; class Rational { private…
(一) 为什么有人想要替换operator new 和 operator delete呢?三个常见的理由: (1)用来检測运用上的错误. (2)为了强化效果. (3)为了收集使用上的统计数据. (二) 以下是个高速发展得出的初阶段global operator new.促进并协助检測"overruns"或"underruns". static const int signature = 0xDEADBEEF; typedef unsigned char Byte;…