2,3,4,5,6,7,8,9,10,11,12,13,14
当前位置: 首页  - 读书笔记  - Effective Modern C++  - 列表

Effective Modern C++

Effective Modern C++27 |熟悉依万能引用型别进行重载的替代方案

27 |熟悉依万能引用型别进行重载的替代方案

上一篇避免依万能引用型别进行重载讲过使用万能引用型别进行重载可能会存在的问题, 这一篇我们就来讲讲如何规避这些问题:一、舍弃重载既然万能引用重载会有问题,那么我们就直接多写几个函数,命名成不同名字,杜绝重载就可以。二、传递const T&型别的形参使用传递左值常量引用型别来替代万能引用型别,这样在就可以限制该函数接受的参数了。三、

Effective Modern C++26 |避免依万能引用型别进行重载

26 |避免依万能引用型别进行重载

如果我们在代码中使用万能引用型别作为函数重载的一个特征标,这样在我们使用该重载函数时,实际调用的函数可能与我们期望不符:示例代码如下:#include <memory>#include <iostream>#include <set>using namespace std;//万能引用型别重载templ

Effective Modern C++25 |针对右值引用实施std::move,针对万能引用实施std::forward

25 |针对右值引用实施std::move,针对万能引用实施std::forward

我们应该知道,一个函数接受一个右值引用参数后将变成左值(可以对其取地址),所以如果在函数内部想要继续使用其右值属性,就可以对其实施std::move,将形参左值转换回右值。对于万能引用,因为其实参可能是右值,也可能是左值(最终形参都是左值),所以对其实施std::forward,实参右值将被转换回右值,实参左值将什么都不做。至于为什么不

Effective Modern C++24| 区分万能引用和右值引用

24| 区分万能引用和右值引用

在前面的文章讲了很多万能引用,形式如"T&&",但右值引用也可以这样表示,具体什么样的才是万能引用呢?万能引用必须涉及型别推导,且参数形式必须为“T&&”,不能带有任何其他修饰关键字(const、volatile),不是万能引用就是右值引用:template <class T>

Effective Modern C++23| 理解std::move和std::forward

23| 理解std::move和std::forward

std::move()实施的是无条件的向右值型别进行强制类型转换,而std::forward仅当实参是右值时,才会将参数转换为右值,且它们都仅仅时强制类型转换,并不做移动操作。 std::move()的使用场景没有什么好说的了,当你需要实参是右值时,执行该函数就对了,因为它可以百分百返回参数对应的右值。关于std::forward的使用

Effective Modern C++19|使用std::shared_ptr管理具备共享所有权的资源

19|使用std::shared_ptr管理具备共享所有权的资源

std::shared_ptr通过引用计数的方式实现资源共享,当计数为0时,资源将被释放,和std::unique_ptr不同的是其不能处理数组,只能处理单个对象。std::shared_ptr的尺寸是裸指针的两倍,因为其内部除了包含了一个指涉到该资源的裸指针,还包含一个指涉到该资源的一个控制块的裸指针,该控制块为动态分配在堆上,内容包含

点击下拉
用户登录