C++ 读书笔记

        leetcode刷了600多题啦,最近会放缓刷题速度(具体而言,就是只打周赛),开始看C++相关内容。

        该内容近短时间内将持续更新,但本身没啥技术含量,因为只是我个人的笔记而已。

        内容:C++ Primer / Effective C++

操作符重载

        拷贝赋值操作符,C风格转换赋值操作:

String& operator = (const String& );
String& operator = (const char* );

        append操作:

String& operator+=(const String& );
String& operator+=(const char* );

        作为类成员的操作符重载符的问题在于,不支持如下语句:

String flower;
if(flower == "lily") // ok
else if("tulip" == flower) // error

       此处,我们希望存在一个操作符,满足左操作数是C风格字符串,右操作数是String类型字符串,但实际上不存在,编译器也不会做隐式转换。(需要查看所有类定义,找到能够把左操作数转换为该类型的构造函数,效率低下)

       作为非成员函数的写法:

bool operator == (const String&, const String& );
bool operator == (const String&, const char* );

        提供后一种重载的初衷是:考虑到C风格字符串到String类型转换的开销。

        以下必须是类成员操作符:

扫描二维码关注公众号,回复: 7242171 查看本文章
=, [], (), ->

生存期

        全局对象:程序启动时分配,程序结束时销毁。

        局部本地对象:进入定义的程序块时创建,离开块时销毁。

        局部static对象:第一次使用前分配,程序结束时销毁。

        动态分配对象:显示释放时销毁。(free store / heap)

shared_ptr类

shared_ptr<string> p1;
shared_ptr<list<int>> p2;

        默认初始化的智能指针中保存着一个空指针。

RTTI

         运行时类型识别:指向基类的指针/引用获取到实际上的类型。

        (1) dynamic_cast操作符,安全类型转换。

        (2) typeid操作符,可以得到实际派生类型。

        应该更多的使用编译时刻类型检查。

猜你喜欢

转载自www.cnblogs.com/fish1996/p/11494070.html