
Modern C++
文章平均质量分 87
breaksoftware
这个作者很懒,什么都没留下…
展开
-
Modern C++——使用分支预测优化代码性能
在C++20中,新引入了一对属性关键字[[likely]]和,它们用于为编译器提供关于代码分支执行概率的额外信息,以帮助编译器进行更好的优化。这对属性是基于长期实践中开发人员对程序执行路径的深入理解而设计的,特别是在面对复杂逻辑和频繁分支的情况下。原创 2024-09-02 00:15:00 · 2106 阅读 · 0 评论 -
Modern C++——无所有权指针的安全性保障
weak_ptr::lock没有任何原子操作,只是会生成一个shared_ptr副本。因为shared_ptr副本的生成,导致其引用计数原子递增,从而保证在使用该副本期间,它所管理的对象不会被释放。原创 2024-08-31 00:15:00 · 1795 阅读 · 0 评论 -
Modern C++——共享所有权指针保证内部对象析构安全的原因分析
在一文中,我们介绍了std::unique_ptr的使用。对于在编码时,所有权传承就非常明确的场景,std::unique_ptr是非常适合和高效的。比如下面这段代码,Custom最终是在线程中使用的,所以我们直接将其所有权从main函数“转移”到process函数中。但是某些特别复杂的场景,所有权并不能在编码时明确,这个时候就需要使用“共享所有权”的shared_ptr。原创 2024-08-30 00:15:00 · 2163 阅读 · 0 评论 -
Modern C++——唯一所有权的明确
我们看到C++98的灵活性带来了很多困扰,比如文中提及的“唯一所有权”归属不明,导致对象的释放位置具有随意性。而Modern C++提供了std::unique_ptr来明确所有权归属,这给C++带来了更多的安全性和易维护性。当然,代价是我们要多学习一些概念。原创 2024-08-30 00:15:00 · 973 阅读 · 0 评论 -
Modern C++——名不符实的std::move
如果论常用C++函数的取名,可能std::move是最“名不符实”的。原创 2024-08-29 00:15:00 · 708 阅读 · 0 评论 -
Modern C++——函数参数类型的分类和使用
要弄清楚这些概念,我们先要知道什么是左值,什么是右值。左值是指在内存中有确定存储地址的对象,可以在表达式中出现在赋值操作符的左侧。右值是指在表达式中没有持久存储地址的临时对象,通常出现在赋值操作符的右侧。比如下面的代码中,a是左值,10是右值。int a = 10;当右值引用需要做复制操作时,会触发移动构造函数。值类型形参会触发复制操作,而引用类型不会触发复制操作。所以如果希望触发移动构造函数,需要将参数形参设计为值类型。原创 2024-08-28 00:15:00 · 1391 阅读 · 0 评论 -
Modern C++——不准确“类型声明”引发的非必要性能损耗
先看下面这段可以运行的代码。请问下面的代码有什么性能问题?可能第一眼看过去,并不能发现它的问题所在。我们将这段代码的运行过程打印出来可以发现在遍历的过程中,发生了Custom对象的复制和析构。如果Custom对象比较大,就会引发性能问题。这是因为std::unordered_map的Key是const类型,即我们应该如下方式遍历编译器在发现我们没有使用const Custom时,会自己推理并转换以符合我们书写的代码。这样就会导致一次const Custom向Custom复制的一次构造。原创 2024-08-26 00:15:00 · 928 阅读 · 0 评论 -
Modern C++——Copy Constructor和Assignment Operator的禁用
在C++中,拷贝构造函数(Copy Constructor)和赋值函数(Assignment Operator,通常称为赋值运算符重载)是处理对象复制和赋值操作的重要机制。有时候,根据类的设计需要,我们可能会选择禁用或限制这些函数的使用。下面我们来探讨禁用拷贝构造函数和赋值函数的作用、好处以及使用场景。原创 2024-08-14 00:15:00 · 1672 阅读 · 0 评论 -
Modern C++——薛定谔的猫和std::optional
在一个充满奇思妙想的量子物理世界里,有一个著名的思想实验,被称为“薛定谔的猫”。这个实验由奥地利物理学家埃尔温·薛定谔提出,用以阐述量子力学中一个深奥而迷人的概念——量子叠加态。故事是这样的:想象有一只猫被关在一个装有少量放射性物质和毒气装置的密封箱子里。这个放射性物质有50%的概率在一个小时内衰变,从而触发毒气装置杀死猫;但同样也有50%的概率不衰变,猫因此安然无恙。根据经典物理学的逻辑,我们自然会认为,当我们打开箱子查看时,猫要么是死的,要么是活的,这两种状态是互斥的。原创 2024-08-15 00:15:00 · 1173 阅读 · 0 评论