大话cpp
文章平均质量分 76
白龙码~
code成就梦想
展开
-
C++关于初始化列表的细节(必须/不能使用初始化列表的情况、初始化列表的效率分析)
为什么有些变量必须在初始化列表中初始化,而有些变量写在初始化列表中会报错?为什么初始化列表有时候效率会更高呢?原创 2023-01-18 20:02:17 · 1159 阅读 · 0 评论 -
完美转发与底层原理剖析(引用折叠)
万能引用:即模板参数T&&,...它会开辟一块空间存放这个右值,对于自定义类型还会调用它的构造函数,因此可以说,。为了使一个函数既可以接受左值,又可以接受右值,C++11 之前的解决方案是将参数类型设为。但是。原创 2022-10-01 20:51:47 · 856 阅读 · 0 评论 -
模板类型萃取与模板的优缺点分析
模板 一、类型萃取type traits 类型萃取,就是通过模板的特化获取模板参数的类型,比如: 在获取了模板类型的情况下,就可以通过IsPodType.Get()查看它是否是内置类型(POD)。 如原创 2022-09-24 20:16:39 · 561 阅读 · 0 评论 -
经典指针问题详解(下)
接着上一章节,我们直接进入正题:经典指针面试题详解(上)笔试题5:int main(){ int a[5][5]; int(*p)[4]; p = a; printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]); return 0;}输出结果为:FFFFFFFC,-4分析:p是指向包含四个整型的数组指针,p=a相当于把数组a的首元素地址赋给p,p[4]\2]等价于*(*(p+4)+2原创 2021-02-16 14:03:18 · 250 阅读 · 2 评论 -
经典指针问题详解(上)
学过C的大都认为,指针是一个让人极其头疼的点;今天,就由我带大家领略几道指针的题目。例题一int main(){ int a[5] = { 1,2,3,4,5 }; int* ptr = (int*)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); return 0;}输出结果:2,5对于这道题的分析,我想直接用一幅图来解决:例题二struct Test { int Num; char* pcName; short原创 2021-02-15 10:45:48 · 3133 阅读 · 4 评论 -
C++静态多态与动态多态的实现原理剖析
静态多态主要借助**模板和重载**。在编译期间,编译器通过类型来实例化模板或者选择合适的重载。因此,**静态多态在编译期间完成**。原创 2022-09-22 16:54:37 · 1203 阅读 · 0 评论 -
什么函数不能是虚函数?为什么析构必须是虚函数?
虚函数是为了依据不同的对象来产生不同的状态,但是前提是得有这个对象,而对象的产生必须依靠构造函数;static成员函数是类的所有对象共享的,而虚函数是针对不同对象构成多态,二者矛盾;其次,静态成员函数没有this指针,无法访问虚函数表。内联函数是在编译期间直接在调用位置展开代码,而虚函数是在运行时通过不同对象来判断函数的调用;如果基类的析构函数是用virtual修饰的虚函数,那么无论派生类的析构函数是否有virtual修饰,它都是虚函数。友元函数不属于类的成员函数,不能被继承,更不能声明为虚函数。原创 2022-09-17 23:03:46 · 376 阅读 · 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 · 431 阅读 · 0 评论 -
模板为什么不能分离编译
一个程序由若干源文件共同实现,每一个源文件单独编译并生成目标文件,最后进行链接形成可执行文件的过程称为分离编译模式。原创 2022-09-15 19:10:21 · 234 阅读 · 0 评论 -
STL六大组件与底层原理
STL,即标准模板库(Standard Template Library),是一些常用数据结构和算法模板的集合,主要由6大组成部分组成。原创 2022-09-13 20:54:08 · 1368 阅读 · 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 · 900 阅读 · 0 评论 -
为什么emplace_back比push_back更快?快是有条件的
学习过C++STL的人都知道emplace比push更快,但是真的如此吗?什么条件下会更快呢?本文将带你深入探索!原创 2022-08-20 08:00:00 · 793 阅读 · 0 评论 -
解读:为什么C++使用nullptr而非NULL
为什么C++引入了nullptr,废弃了NULL?原创 2021-09-28 12:36:53 · 1183 阅读 · 16 评论 -
解读:为什么C语言没有重载?
深度剖析:重载的底层原理原创 2021-10-09 14:28:48 · 1710 阅读 · 3 评论 -
【大话cpp】一个程序实现C到C++的过渡(头文件、命名空间以及标准输入输出)
揭开C plus plus的面纱!原创 2021-09-25 14:25:24 · 222 阅读 · 5 评论