每天一点点--C++

unlikely()

likely,用于修饰if/else if分支,表示该分支的条件更有可能被满足。而unlikely与之相反;unlikely修饰的分支,表示该分支不太可能被满足。

auto

auto的推导规则:

规则1:声明为auto(不是auto&)的变量,忽视掉初始化表达式的顶层const。即对有const的普通类型(int 、double等)忽视const,对常量指针(顶层const)变为普通指针,对指向常量(底层const)的常量指针(顶层cosnt)变为指向常量的指针(底层const)。

规则2:声明为auto&的变量,保持初始化表达式的顶层const或volatile 属性。

规则3:若希望auto推导的是顶层const,加上const,即const auto。

find()函数:

find函数完成最简单的搜索。它查找参数指定的字符串,若找到,则返回第一个匹配的下标,否则返回npos:

std::make_pair

make_pair函数的定义如下:

template pair make_pair(T1 a, T2 b) { return pair(a, b); }

一般make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象。

另一个使用的方面就是pair可以接受隐式的类型转换,这样可以获得更高的灵活度。但是这样会出现如下问题:

例如有如下两个定义:

std::pair<int, float>(1, 1.1);

std::make_pair(1, 1.1);

其中第一个的second变量是float类型,而make_pair函数会将second变量都转换成double类型。

push_back():在Vector最后添加一个元素(参数为要插入的值)

std::make_shared

C++11 中引入了智能指针, 同时还有一个模板函数 std::make_shared 可以返回一个指定类型的 std::shared_ptr, 那与 std::shared_ptr 的构造函数相比它能给我们带来什么好处呢 ?

shared_ptr维护引用计数需要的信息

强引用, 用来记录当前有多少个存活的 shared_ptrs 正持有该对象. 共享的对象会在最后一个强引用离开的时候销毁( 也可能释放).

弱引用, 用来记录当前有多少个正在观察该对象的 weak_ptrs. 当最后一个弱引用离开的时候, 共享的内部信息控制块会被销毁和释放 (共享的对象也会被释放, 如果还没有释放的话).

使用原始的new函数创建shared_ptr

首先是原始的new分配了原始对象, 然后将这个对象传递给 shared_ptr (即使用 shared_ptr 的构造函数) , shared_ptr 对象只能单独的分配控制块。

控制块包含被指向对象的引用计数以及其他,也就是说,控制块的内存是在std::shared_ptr的构造函数中分配的。

使用make_shared创建shared_ptr

如果选择使用 make_shared 的话, 内存分配的动作, 可以一次性完成,因为std::make_shared申请一个单独的内存块来同时存放指向的对象和控制块,这减少了内存分配的次数, 而内存分配是代价很高的操作。同时,使用std::make_shared消除了一些控制块需要记录的信息,减少了程序的总内存占用。

使用make_shared的缺点

创建的对象如果没有公有的构造函数时,make_shared无法使用。

使用make_shared内存可能无法及时回收,对内存要求要的场景需要注意。

std::move

std::move() 函数将一个左值强制转化为右值引用,以用于移动语义。是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。

变量表达式是一个左值,即使这个变量是一个右值引用类型,也是将其看成是左值的。

可以通过move库函数来获得绑定到左值上的右值引用。

移动语义,允许直接转移对象的资产和属性的所有权,而在参数为右值时无需复制它们。

换一种说法就是,std::move() 将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。因此,通过std::move(),可以避免不必要的拷贝操作。

override:

描述:override保留字表示当前函数重写了基类的虚函数。

目的:1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的);2.强制编译器检查某个函数是否重写基类虚函数,如果没有则报错。

用法:在类的成员函数参数列表后面添加该关键字既可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值