<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[applemonkey11的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/applemonkey11</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; applemonkey11]]></copyright><item><title><![CDATA[《Effective C++》条款27:尽量少做转型动作]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/79072953</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/79072953</guid><author>applemonkey11</author><pubDate>Tue, 16 Jan 2018 11:36:58 +0800</pubDate><description><![CDATA[C++中的四种新式转型:
const_cast:常量性转除
dynamic_cast:用来决定某对象是否归属继承体系中的某个类型
reinterpret_cast:低级转型,如将pointer to int转型为int
static_cast:强迫隐式转型,如将non-const转成const, int转为double,将void*转为typed指针,将pointer-to-base转为p]]></description><category></category></item><item><title><![CDATA[《Effective C++》条款21:必须返回对象时,别妄想返回其reference; 24:若所有参数皆需类型转换,请为此采用non-member函数]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/79043568</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/79043568</guid><author>applemonkey11</author><pubDate>Fri, 12 Jan 2018 14:23:23 +0800</pubDate><description><![CDATA[实现一个有理数类:

class Rational {
//friend const Rational operator* (const Rational& lhs, const Rational&rhs);
//friend bool operator== (const Rational& lhs, const Rational&rhs);
public:
    Rational(int ]]></description><category></category></item><item><title><![CDATA[将智能指针作为函数输入参数的两个问题]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/79031615</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/79031615</guid><author>applemonkey11</author><pubDate>Thu, 11 Jan 2018 10:51:58 +0800</pubDate><description><![CDATA[1.考虑这样的processWidget函数声明:
void processWidget(shared_ptr pw, int priority);当我们采取这样的方式调用:
processWidget(new Widget, priority());显然是不能编译通过的，因为shared_ptr不接受通过new指针隐式的构造(explicit)
所以这样写就能通过编译:
processW]]></description><category></category></item><item><title><![CDATA[《C++ Primer》第12章:动态内存]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/79014466</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/79014466</guid><author>applemonkey11</author><pubDate>Tue, 09 Jan 2018 16:33:54 +0800</pubDate><description><![CDATA[shared_ptr允许多个指针指向同一个对象,unique_ptr独占所指向的对象,用make_shared函数分配动态内存，返回对象的shared_ptr.
程序使用动态内存的原因之一是需要在多个对象间共享数据, 自己直接管理内存的类与使用智能指针的类不同, 它们不能依赖类的对象拷贝、赋值和销毁操作的任何默认定义.
week_ptr是一种不控制所指向对象生存期的智能指针，它指向由一个sha]]></description><category></category></item><item><title><![CDATA[《Effective C++》条款12:复制对象是勿忘其每一个成分]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/78962440</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/78962440</guid><author>applemonkey11</author><pubDate>Wed, 03 Jan 2018 16:14:05 +0800</pubDate><description><![CDATA[对于拷贝构造函数和拷贝赋值函数，如果决定自己定义，那么不要忘记调用父类的相应构造函数。因为如果没有调用，对于拷贝构造函数，编译器会去自动调用父类的default构造函数，那么父类的成员没有被成功从子类实例拷贝；对于拷贝赋值函数，编译器不会做额外的操作，意味着只有子类的部分被赋值，而父类的成员维持原状。
如下代码子类中的拷贝构造函数和拷贝赋值函数，没有主动调用父类的相应函数:
class Bas]]></description><category></category></item><item><title><![CDATA[《Effective C++ 》条款10:令operator=返回一个reference to *this]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/78960418</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/78960418</guid><author>applemonkey11</author><pubDate>Wed, 03 Jan 2018 13:55:59 +0800</pubDate><description><![CDATA[令operator=返回一个reference to *this.以实现连锁赋值（右结合形式的连锁赋值，不返回reference也可以实现，但每次赋值之后函数返回的时候，会额外调用拷贝构造来创建一个临时的对象）


class Int {
public:
    Int() : value(0){}
    Int(int i) : value(i) {}
    Int(const Int]]></description><category></category></item><item><title><![CDATA[实现一个String类]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/78949981</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/78949981</guid><author>applemonkey11</author><pubDate>Tue, 02 Jan 2018 11:06:41 +0800</pubDate><description><![CDATA[class MyString {
public:
    MyString():len(0),data(NULL) {
        len = 0;
        data = new char[1];
        data[0] = '\0';
    }
    MyString(const char* str) {
        if (str == NULL) {
      ]]></description><category></category></item><item><title><![CDATA[Effective C++ 第三版 学习]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/78928802</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/78928802</guid><author>applemonkey11</author><pubDate>Fri, 29 Dec 2017 10:23:54 +0800</pubDate><description><![CDATA[1. 匿名enum的作用，等同于静态常成员变量
class GamePlayer {
private:
    enum {NumTurns = 5};
    int scores[NumTurns];
};
一般来说static const成员变量在类外进行定义：
class CostEstimate {
private:
    static const double FudgeFac]]></description><category></category></item><item><title><![CDATA[《Unix环境高级编程》准备apue.h]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/69388757</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/69388757</guid><author>applemonkey11</author><pubDate>Thu, 06 Apr 2017 13:39:58 +0800</pubDate><description><![CDATA[《Unix环境高级编程》的第一个程序1-1，编译报告找不到apue.h，解决方法：

1. 从http://www.apuebook.com/code2e.html下载src.2e.tar.gz 放在/cygdrive/d/UnixProgramming/下

2. 解压
$ tar zxvf src.2e.tar.gz

3. 进入解压目录，修改Make.defines.linux]]></description><category></category></item><item><title><![CDATA[《C++ Primer 第五版》学习笔记-第四章-表达式]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/56003758</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/56003758</guid><author>applemonkey11</author><pubDate>Mon, 20 Feb 2017 08:32:10 +0800</pubDate><description><![CDATA[1. ++a; //把值加1后直接返回改变了的运算对象（左值）
a++; //返回原始对象的副本（右值）

2. 

cout << *iter++ << endl; //++高于*，*(iter++)
等价于
cout << *iter << endl;
++iter;
3. 逗号运算符
    首先对左侧表达式求值，然后将结果丢弃掉，返回右侧表达式的值。]]></description><category></category></item><item><title><![CDATA[《C++ Primer 第五版》学习笔记-第三章-字符串、向量和数组]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/56003705</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/56003705</guid><author>applemonkey11</author><pubDate>Mon, 20 Feb 2017 08:25:51 +0800</pubDate><description><![CDATA[1. string类型的size函数，返回值类型是size_type


2. c++ 标准提供了一种范围for语句，可用于string, vector, 数组


3. 在大多数表达式中，使用数组类型的对象其实是使用一个指向该数组首元素的指针


4. C风格字符串和string




C风格字符串
string


const char[] =
stri]]></description><category></category></item><item><title><![CDATA[《C++ Primer 第五版》学习笔记-第二章-变量和基本类型]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/56003627</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/56003627</guid><author>applemonkey11</author><pubDate>Mon, 20 Feb 2017 07:50:42 +0800</pubDate><description><![CDATA[1. C++提供了几种字符类型
    char可以存放机器基本字符集中的任意字符对应的数字值
    wchar_t可以存放机器最大扩展字符集中的任意一字符
    char16_t和char32_t是Unicode字符，用于表示所有自然语言中字符的标准


2. 字符型分为char, signed char, unsigned char.
    char和signed char]]></description><category></category></item><item><title><![CDATA[set, shared_ptr, unique_ptr 传入可调用对象]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/54908649</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/54908649</guid><author>applemonkey11</author><pubDate>Tue, 07 Feb 2017 13:24:48 +0800</pubDate><description><![CDATA[multiset - 编译时已经知道函数类型

multisetdecltype(compareIsbn)*> bookstore(compareIsbn);


shared_ptr -- 运行时绑定

shared_ptr sp1(&c, [c](){disconnection(&c);});

unique_ptr - 编译时已经知道函数类型

unique_ptr*>]]></description><category></category></item><item><title><![CDATA[修饰类成员函数的几个关键字：inline, const, explicit, static, virtual]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/53762328</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/53762328</guid><author>applemonkey11</author><pubDate>Tue, 20 Dec 2016 14:12:40 +0800</pubDate><description><![CDATA[修饰类成员函数的几个关键字：inline, const, explicit, static]]></description><category></category></item><item><title><![CDATA[《C++ Primer 第五版》学习笔记-第一章-开始]]></title><link>https://blog.youkuaiyun.com/applemonkey11/article/details/53762051</link><guid>https://blog.youkuaiyun.com/applemonkey11/article/details/53762051</guid><author>applemonkey11</author><pubDate>Tue, 20 Dec 2016 13:54:01 +0800</pubDate><description><![CDATA[1. 访问main函数返回值的方法：
Linux： echo $?
Windos：echo %ERRORLEVEL%


2. 标准库定义了4个IO对象：
istream对象 cin
ostream对象 cout(标准输出)，cerr(警告和错误，无缓冲)，clog(程序运行时的一般信息)


3. 特殊的操纵符endl:
结束当前行，并将与设备关联的缓冲区中的内容刷到设备中]]></description><category></category></item></channel></rss>