news 2026/7/13 21:20:54

C++基础核心内容

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++基础核心内容

一、左值引用和右值引用

1、要点总结

2、引用和指针的汇编指令

定义一个引用变量和定义一个指针变量的汇编指令是一样的

3、右值引用汇编指令

二、函数模板

1、要点总结

2、函数模板

3、函数模板实参的推演

4、模板特例化

5、注意点

(1)

(2)

三、类模板

四、对象的深拷贝和浅拷贝

1、要点总结

(1)浅拷贝的风险:对象默认的拷贝构造函数(浅拷贝)是做内存的数据拷贝,当对象有占用外部资源时,那么浅拷贝就会出现问题。假设对象A指向一个数组X,对象B拷贝对象A,此时对象B也会指向数组X,当对象B进行析构的时候,数组X就会被释放掉,对象A进行析构时无法再释放数组X,此时就会出现问题。

(2)浅拷贝的风险应对措施:自定义拷贝构造函数和赋值重载函数,重新开辟内存空间,保障每个对象都占用自己的外部资源,无论谁先析构都不会影响最后析构的对象。

五、继承&派生类

1、要点总结

六、虚函数

1、要点总结

1、一个类里面定义了虚函数,那么编译阶段,编译器给这个类产生一个唯一的的vftable虚函数表,虚函数表中主要存储的内容就是RTTI指针(RTTI:运行时的类型信息)和虚函数的地址。当程序运行时,每一张虚函数表都会加载到内存的.rodata区(只读数据区)。

2、一个类里面定义了虚函数,那么这个类定义的对象,其运行时,内存中开始部分多储存一个vfptr虚函数指针,指向相应类型的虚函数表vftable。一个类型定义的n个对象,它们的vfptr指向的都是同一张虚函数表。

3、一个类里面虚函数的个数不影响对象内存大小,影响的是虚函数表的大小。

4、如果派生类中的方法和基类中的某个方法的返回值、函数名、参数列表都相同,而且基类中的方法是虚函数,那么派生类的这个方法自动处理成虚函数,覆盖虚函数表中基类相同方法的地址。

5、举例

(1)基类中没有虚函数

//注意:以下代码不完整,只是整理大概思路 #include<iostream> #include<typeinfo> class Base { public: Base(int data) :ma(data) {} void show() {cout<<"Base::show()"<<endl;} void show(int d) {cout<<"Base::show(int)"<<endl;} private: int ma; }; class Derive:public Base { public: void show(){cout<<"Derive::show()"<<endl;} private: int mb; }; int main() { Derive d(50); Base* pd = &d; pd->show();//结果:Base::show(),在基类中是普通函数,所以是静态绑定,是编译时期的函数调用 pd->show(10);//结果:Base::show(int),在基类中是普通函数,所以是静态绑定,是编译时期的函数调用 cout<<sizeof(Base)<<endl;//结果:4,int ma 的大小 cout<<sizeof(Derive)<<endl;//结果:8,int ma,int mb 的大小之和 cout<<typeip(pd).name<<endl;//结果:class Base* ;Base* pd = &d;是静态绑定,是编译时期的函数调用 cout<<typeip(*pd).name<<endl;//结果:class Base,基类没有虚函数,所以是静态绑定,是编译时期的类型 return 0; }

(2)基类中有虚函数

//注意:以下代码不完整,只是整理大概思路 #include<iostream> #include<typeinfo> class Base { public: Base(int data) :ma(data) {} virtual void show() {cout<<"Base::show()"<<endl;}//虚函数 virtual void show(int d) {cout<<"Base::show(int)"<<endl;}//虚函数 private: int ma; }; class Derive:public Base { public: void show(){cout<<"Derive::show()"<<endl;} private: int mb; }; int main() { Derive d(50); Base* pd = &d; pd->show();//结果:Base::show(),在基类中是虚函数,所以是动态绑定,运行时绑定的函数调用 pd->show(10);//结果:Base::show(int),在基类中是虚函数,所以是动态绑定,运行时绑定的函数调用 cout<<sizeof(Base)<<endl;//结果:8,int ma 的大小 + vfptr指针的大小(4) cout<<sizeof(Derive)<<endl;//结果:12,int ma,int mb 的大小之和 + vfptr指针的大小(4) cout<<typeip(pd).name<<endl;//结果:class Base* ;Base* pd = &d;是静态绑定,是编译时期的函数调用 cout<<typeip(*pd).name<<endl;//结果:class Base,基类有虚函数,所以是动态绑定,由RTTI类型决定 return 0; }

七、和时间相关的函数

1、clock_gettime函数

clock_gettime是用于获取当前时间的系统调用,通常在Unix和Linux系统中使用。它可以提供高分辨率的时间戳,适用于时间测量和性能分析。

#include <time.h> int clock_gettime(clockid_t clk_id, struct timespec *tp);

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 21:20:38

如何用ChatGPT查询真实文献,并轻松撰写文献综述,七步搞定,全攻略指南

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 撰写文献综述对于学术研究人员来说是一项极其耗时费力的苦活。这…

作者头像 李华
网站建设 2026/7/13 21:19:31

AI Coding时代来临:小白也能掌握的Agent工程师高薪技能,速收藏!

AI技术的飞速发展正在改变职场&#xff0c;传统的前端、后端等技术栈被Agent工程师所取代。AI能够快速生成代码&#xff0c;使得工程师的核心价值转变为设计架构、监督AI工作等。Agent工程师薪资高、发展空间大&#xff0c;市场对相关人才的需求激增。 AI Coding&#xff0c;问…

作者头像 李华
网站建设 2026/7/13 21:12:05

张家口GEO优化企业

在互联网营销领域&#xff0c;GEO生成引擎优化正逐渐成为企业获取流量和提升品牌曝光的关键手段。那么&#xff0c;什么是GEO生成引擎优化&#xff0c;企业做这类优化又有什么价值呢&#xff1f;概念解释GEO生成引擎优化&#xff0c;即通过对搜索引擎、AI大模型等生成式引擎的优…

作者头像 李华
网站建设 2026/7/13 21:05:44

babel的转换流程是什么样的

面试先给结论Babel 的转换流程&#xff0c;本质上就是&#xff1a;把源码解析成 AST&#xff0c;遍历 AST 做语法转换&#xff0c;最后再根据新的 AST 生成目标代码。可以概括成 3 步&#xff1a;Parse&#xff1a;解析Transform&#xff1a;转换Generate&#xff1a;生成如果在…

作者头像 李华
网站建设 2026/7/13 20:59:22

PS任何制作好看的抖音快手视频封面模板psd源文件

制作前需要准备以下工具素材 第一步&#xff1a;安装好PS软件 、 第二步&#xff1a;准备素材 第三步&#xff1a;打看PS软件开始制作 1&#xff0c;打开PS后创建一个1242x1660像素的图层2&#xff0c;然后在导入我们提前准备好的框框素材&#xff0c;如果实在找不到也可以用ai…

作者头像 李华
网站建设 2026/7/13 20:59:19

EeveeSpotify完整指南:免费解锁Spotify高级功能的终极教程

EeveeSpotify完整指南&#xff1a;免费解锁Spotify高级功能的终极教程 【免费下载链接】EeveeSpotify A tweak to get Spotify Premium for free, just like Spotilife 项目地址: https://gitcode.com/GitHub_Trending/ee/EeveeSpotify 你是否厌倦了Spotify免费版中频繁…

作者头像 李华