
大话cpp
文章平均质量分 74
白龙码~
code成就梦想
展开
-
C++关于初始化列表的细节(必须/不能使用初始化列表的情况、初始化列表的效率分析)
为什么有些变量必须在初始化列表中初始化,而有些变量写在初始化列表中会报错?为什么初始化列表有时候效率会更高呢?原创 2023-01-18 20:02:17 · 1382 阅读 · 0 评论 -
完美转发与底层原理剖析(引用折叠)
万能引用:即模板参数T&&,...它会开辟一块空间存放这个右值,对于自定义类型还会调用它的构造函数,因此可以说,。为了使一个函数既可以接受左值,又可以接受右值,C++11 之前的解决方案是将参数类型设为。但是。原创 2022-10-01 20:51:47 · 1141 阅读 · 0 评论 -
C++静态多态与动态多态的实现原理剖析
静态多态主要借助**模板和重载**。在编译期间,编译器通过类型来实例化模板或者选择合适的重载。因此,**静态多态在编译期间完成**。原创 2022-09-22 16:54:37 · 1499 阅读 · 0 评论 -
什么函数不能是虚函数?为什么析构必须是虚函数?
虚函数是为了依据不同的对象来产生不同的状态,但是前提是得有这个对象,而对象的产生必须依靠构造函数;static成员函数是类的所有对象共享的,而虚函数是针对不同对象构成多态,二者矛盾;其次,静态成员函数没有this指针,无法访问虚函数表。内联函数是在编译期间直接在调用位置展开代码,而虚函数是在运行时通过不同对象来判断函数的调用;如果基类的析构函数是用virtual修饰的虚函数,那么无论派生类的析构函数是否有virtual修饰,它都是虚函数。友元函数不属于类的成员函数,不能被继承,更不能声明为虚函数。原创 2022-09-17 23:03:46 · 584 阅读 · 0 评论 -
C++菱形继承问题与虚拟继承原理
B和C同时继承了A中的a,然后又派生出了D,因而D中存在两份a:一份是B::a,一份是C::a。因此,在D中直接访问a会导致错误,此时的a就具有二义性,需要指定类作用域才能访问。多个类继承了同一个公共基类,而这些派生类又同时被一个类继承,这种称为菱形继承或钻石继承。多个类继承了同一个公共基类,而这些派生类又同时被一个类继承,这种称为菱形继承或钻石继承。B和C同时继承了A的成员,此时D继承B和C,相当于获得了两份A的成员,造成数据冗余。注:公共数据的位置可能是D的开头,也可能是结尾,依编译器而定。原创 2022-09-16 22:34:19 · 576 阅读 · 0 评论 -
STL六大组件与底层原理
STL,即标准模板库(Standard Template Library),是一些常用数据结构和算法模板的集合,主要由6大组成部分组成。原创 2022-09-13 20:54:08 · 1983 阅读 · 0 评论 -
C++智能指针原理与实现
如果一块内存被shared_ptr和weak_ptr同时引用,当所有shared_ptr析构了之后,不管还有没有weak_ptr引用该内存,内存也会被释放。unique_ptr在auto_ptr的基础上直接禁用了拷贝构造和赋值重载(delete),从而避免了auto_ptr在使用上容易出错的问题,但是没有了这两个函数,对于用户非常不便。weak_ptr是一个弱引用,它是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,也就是说,它。原创 2022-09-10 15:24:56 · 1363 阅读 · 1 评论 -
为什么emplace_back比push_back更快?快是有条件的
学习过C++STL的人都知道emplace比push更快,但是真的如此吗?什么条件下会更快呢?本文将带你深入探索!原创 2022-08-20 08:00:00 · 1004 阅读 · 0 评论 -
解读:为什么C++使用nullptr而非NULL
为什么C++引入了nullptr,废弃了NULL?原创 2021-09-28 12:36:53 · 1338 阅读 · 16 评论 -
解读:为什么C语言没有重载?
深度剖析:重载的底层原理原创 2021-10-09 14:28:48 · 2192 阅读 · 3 评论