<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[peakyblinder的博客]]></title><description><![CDATA[C++大白的学习之路]]></description><link>https://blog.youkuaiyun.com/peakyblinder</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; peakyblinder]]></copyright><item><title><![CDATA[条款49-52]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80466774</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80466774</guid><author>peakyblinder</author><pubDate>Mon, 28 May 2018 19:43:02 +0800</pubDate><description><![CDATA[条款49：了解new_handler的行为        operator new抛出异常以反映一个未获满足的内存需求之前，它会先调用一个用户指定的错误处理函数，一个所谓的new_handler。为了指定这个函数，客户必须调用set_new_handler：namespace std{
typedef void (*new_handler)();
new_handler set_new_handl...]]></description><category></category></item><item><title><![CDATA[条款41-48]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80448475</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80448475</guid><author>peakyblinder</author><pubDate>Sat, 26 May 2018 18:49:00 +0800</pubDate><description><![CDATA[条款41：了解隐式接口和编译期多态        面向对象编程总是以显示接口和运行期多态解决问题。template及泛型编程的世界，与面向对象有根本不同，虽然显示接口和运行期多态仍然存在，但重要性降低，而隐式接口和编译期多态更为重要。        运行期多态和编译期多态类似于“哪一个重载函数被调用”（编译期）和“哪一个virtual函数该被绑定”（运行期）的差异类似。        显示接口由函...]]></description><category></category></item><item><title><![CDATA[第十八章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80432324</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80432324</guid><author>peakyblinder</author><pubDate>Fri, 25 May 2018 10:41:53 +0800</pubDate><description><![CDATA[18.1.1        对未构造的内存中的对象进行赋值而不是初始化，其行为是未定义的。对许多类而言，这样做引起运行时崩溃。赋值涉及删除现存对象，如果没有现存对象，赋值操作符中的动作就会有灾难性效果。18.1.2allocator&amp;lt;T&amp;gt; a;定义名为 a 的 allocator 对象，可以分配内存或构造 T 类型的对象a.allocate(n)分配原始的未构造内存以保存 T 类型的 ...]]></description><category></category></item><item><title><![CDATA[第十七章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80409712</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80409712</guid><author>peakyblinder</author><pubDate>Wed, 23 May 2018 22:43:54 +0800</pubDate><description><![CDATA[17.1.1        被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。         因为在处理异常的时候会释放局部存储，所以被抛出的对象就不能再局部存储，而是用 throw 表达式初始化一个称为异常对象的特殊对象。异常对象由编译器管理，而且保证驻留在可能被激活的任意 catch 都可以访问的空间。这个对象由 throw 创建，并被初始化为被抛出的表达式的副本。异常对...]]></description><category></category></item><item><title><![CDATA[第十六章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80296726</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80296726</guid><author>peakyblinder</author><pubDate>Mon, 21 May 2018 16:17:35 +0800</pubDate><description><![CDATA[16.1.1        函数模板可以用与非模板函数一样的方式声明为 inline。说明符放在模板形参表之后、返回类型之前，不能放在关键字 template 之前。 16.1.3        模板形参遵循常规名字屏蔽规则。与全局作用域中声明的对象、函数或类型同名的模板形参会屏蔽全局名字： typedef double T;
template &amp;lt;class T&amp;gt; T calc(con...]]></description><category></category></item><item><title><![CDATA[第十五章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80288609</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80288609</guid><author>peakyblinder</author><pubDate>Sat, 12 May 2018 19:16:53 +0800</pubDate><description><![CDATA[基类成员函数         除了构造函数之外，任意非 static 成员函数都可以是虚函数。保留字只在类内部的成员函数声明中出现，不能用在类定义体外部出现的函数定义上。15.2.2        protected 还有另一重要性质： 派生类只能通过派生类对象访问其基类的 protected 成员，派生类对其基类类型对象的 protected 成员没有特殊访问权限：void Bulk_item:...]]></description><category></category></item><item><title><![CDATA[第十四章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80248319</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80248319</guid><author>peakyblinder</author><pubDate>Wed, 09 May 2018 21:52:45 +0800</pubDate><description><![CDATA[14.1        用于内置类型的操作符，其含义不能改变。例如，内置的整型加号操作符不能重定义： // error: cannot redefine built-in operator for ints
int operator+(int, int);        重载操作符必须具有至少一个类类型或枚举类型（第 2.7 节）的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符...]]></description><category></category></item><item><title><![CDATA[第十三章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80093954</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80093954</guid><author>peakyblinder</author><pubDate>Tue, 08 May 2018 22:11:25 +0800</pubDate><description><![CDATA[13.1拷贝构造函数和赋值函数区别：        调用的是拷贝构造函数还是赋值运算符，主要是看是否有新的对象实例产生。如果产生了新的对象实例，那调用的就是拷贝构造函数；如果没有，那就是对已有的对象赋值，调用的是赋值运算符。        话句话说，就是初始化时调用的是拷贝构造函数，赋值时调用赋值操作。        复制初始化首先使用指定构造函数创建一个临时对象（第 7.3.2 节），然后用复制...]]></description><category></category></item><item><title><![CDATA[第十二章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80081880</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80081880</guid><author>peakyblinder</author><pubDate>Wed, 25 Apr 2018 22:26:16 +0800</pubDate><description><![CDATA[12.1.4        因为只有当类定义体完成后才能定义类，因此类不能具有自身类型的数据成员。然而，只要类名一出现就可以认为该类已声明。因此，类的数据成员可以是指向自身类型的指针或引用： class LinkScreen {
Screen window;
LinkScreen *next;
LinkScreen *prev;
};12.2        基于成员函数是否为 const， 可以重...]]></description><category></category></item><item><title><![CDATA[条款32-40]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80060557</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80060557</guid><author>peakyblinder</author><pubDate>Wed, 25 Apr 2018 16:04:02 +0800</pubDate><description><![CDATA[条款32：确定你的public继承塑模出is-a关系        public inheritance意味“is-a”（是一种）的关系。如果令class D以public继承class B，即每一个类型为D的对象同时也是一个类型为B的对象，反之不成立。B比D表现出更一般化的概念，而D比B表现出更特殊化的概念。B可以派上用场的地方，D对象一样可以派上用场，因为每一个D对象都是一个（是一种）B对象。...]]></description><category></category></item><item><title><![CDATA[第十一章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80050329</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80050329</guid><author>peakyblinder</author><pubDate>Mon, 23 Apr 2018 21:34:40 +0800</pubDate><description><![CDATA[11.1关键概念：算法永不执行容器提供的操作         泛型算法本身从不执行容器操作，只是单独依赖迭代器和迭代器操作实现。算法基于迭代器及其操作实现，而并非基于容器操作。这个事实也许比较意外，但本质上暗示了：使用“普通”的迭代器时，算法从不修改基础容器的大小。正如我们所看到的，算法也许会改变存储在容器中的元素的值，也许会在容器内移动元素，但是，算法从不直接添加或删除元素。第 11.3.1 节...]]></description><category></category></item><item><title><![CDATA[第十章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80023669</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80023669</guid><author>peakyblinder</author><pubDate>Sat, 21 Apr 2018 17:14:39 +0800</pubDate><description><![CDATA[10.3        map 是键－值对的集合。map 类型通常可理解为关联数组（associativearray） ：可使用键作为下标来获取一个值，正如内置数组类型一样。而关联的本质在于元素的值与某个特定的键相关联， 而并非通过元素在数组中的位置来获取。         在使用关联容器时， 它的键不但有一个类型， 而且还有一个相关的比较函数。默认情况下，标准库使用键类型定义的 &amp;lt; 操作符...]]></description><category></category></item><item><title><![CDATA[条款27-31]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80013455</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80013455</guid><author>peakyblinder</author><pubDate>Fri, 20 Apr 2018 19:12:09 +0800</pubDate><description><![CDATA[条款27：尽量少做转型动作class window{
public:
virtual void onResize(){...};
...
};
class specialWindow:public window{
public:
virtual void onResize()
{
static_cast&amp;lt;window&amp;gt;(*this).onResize();
}
};        上述...]]></description><category></category></item><item><title><![CDATA[第九章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/80007000</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/80007000</guid><author>peakyblinder</author><pubDate>Thu, 19 Apr 2018 17:40:35 +0800</pubDate><description><![CDATA[9.1.1        将一个容器复制给另一个容器时，类型必须匹配：容器类型和元素类型都必须相同。         使用迭代器时，不要求容器类型相同。容器内的元素类型也可以不相同，只要它们相互兼容，能够将要复制的元素转换为所构建的新容器的元素类型，即可实现复制。         不提供元素初始化式时， 标准库将为该容器实现值初始化（3.3.1节）。采用这种类型的初始化，元素类型必须是内置或复合类...]]></description><category></category></item><item><title><![CDATA[第八章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/79996502</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/79996502</guid><author>peakyblinder</author><pubDate>Wed, 18 Apr 2018 22:03:24 +0800</pubDate><description><![CDATA[8.1IO 对象不可复制或赋值ofstream out1, out2;
out1 = out2; // error: cannot assign stream objects
// print function: parameter is copied
ofstream print(ofstream);
out2 = print(out2); // error: cannot copy strea...]]></description><category></category></item><item><title><![CDATA[条款20-26]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/79989480</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/79989480</guid><author>peakyblinder</author><pubDate>Wed, 18 Apr 2018 17:05:53 +0800</pubDate><description><![CDATA[条款20：宁以pass_by_reference替换pass_by_value        缺省情况下C++以by value方式传递对象至函数，这可能使得pass_by_value成为费时的操作。而pass_by_reference可以避免构造和析构操作，并且by reference方式传递参数可以避免slicing（对象切割）问题。当一个derived class对象以by value方式传...]]></description><category></category></item><item><title><![CDATA[第七章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/79969255</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/79969255</guid><author>peakyblinder</author><pubDate>Tue, 17 Apr 2018 11:24:16 +0800</pubDate><description><![CDATA[        C++ 语言使用调用操作符（即一对圆括号）实现函数的调用。         如果将形参定义为非引用的 const 类型： void fcn(const int i) { /* fcn can read but not write to i */ }        则在函数中，不可以改变实参的局部副本。由于实参仍然是以副本的形式传递，因此传递给 fcn 的既可以是 const 对象也...]]></description><category></category></item><item><title><![CDATA[第六章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/79959902</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/79959902</guid><author>peakyblinder</author><pubDate>Mon, 16 Apr 2018 15:12:18 +0800</pubDate><description><![CDATA[6.6.5        对于 switch 结构，只能在它的最后一个 case 标号或 default 标号后面定义变量： case true:
// error: declaration precedes a case label
string file_name = get_file_name();
break;
case false:        制定这个规则是为避免出现代码跳过变量的定...]]></description><category></category></item><item><title><![CDATA[第五章]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/79946439</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/79946439</guid><author>peakyblinder</author><pubDate>Sun, 15 Apr 2018 11:25:36 +0800</pubDate><description><![CDATA[5.3.2只有在必要时才使用后置操作符         前置操作需要做的工作更少，只需加 1 后返回加 1 后的结果即可。而后置操作符则必须先保存操作数原来的值，以便返回未加 1 之前的值作为操作的结果。 对于更多的复杂迭代器类型，这种额外工作可能会花费更大的代价。 5.11        一旦删除了指针所指向的对象，立即将指针置为 0，这样就非常清楚地表明指针不再指向任何对象。 5.12.6co...]]></description><category></category></item><item><title><![CDATA[条款11-17]]></title><link>https://blog.youkuaiyun.com/peakyblinder/article/details/79933089</link><guid>https://blog.youkuaiyun.com/peakyblinder/article/details/79933089</guid><author>peakyblinder</author><pubDate>Fri, 13 Apr 2018 22:06:34 +0800</pubDate><description><![CDATA[条款11：在operator=中处理“自我赋值”        如果一段代码操作pointers或者references而它们被用来指向多个相同类型的对象，就需要考虑这些对象是否为同一个。实际上，只要来自同一继承体系，它们甚至不需要声明为相同类型就可以造成别名（如C++的多态性，base class的指针或者引用可以指向derived class）。class BitMap{};
class Wi...]]></description><category></category></item></channel></rss>