
C++系列
文章平均质量分 94
无
ForBestSelf
后端开发程序猿养成中
展开
-
C++之对象内存布局(继承、虚函数、虚继承等多种情况)
目录1. 对象内存布局基本情况2. 在不同情况下的对象内存布局——通过实验验证2.1 无继承2.1.1 无虚函数2.1.2 有虚函数2.2 深度为1的多继承2.2.1 无虚函数1. 对象内存布局基本情况(1)对象内存空间中存放的内容包括普通成员变量、虚表指针(如果类中包含虚函数)、虚基表指针(如果存在虚继承);(2)对象内存空间大小按结构体对齐原则来计算,若类是空类,则对象内存空间大小是1字节,以保证不同对象的内存地址不同;当空类作为基类时,对于派生类来说,其基类部分原创 2021-04-10 23:42:47 · 445 阅读 · 1 评论 -
C++之内存对齐(结构体嵌套等情况)
目录1. 为何需要内存对齐2. 内存对齐规则2.1 内置类型的对齐规则2.2 结构体or类类型对齐规则2.2.1 不考虑结构体嵌套情况2.2.2 结构体嵌套结构体1. 为何需要内存对齐提升CPU从内存中读取数据的效率。CPU将内存视作若干个大小相等的内存块,每一块的大小等于数据总线的宽度,CPU以块为基本单位读取数据。举个例子来说明,假设有一内存,其地址(以字节为单位)为{0,1,2,3,4,5,6,7,8,9,10,11},数据总线宽度是4字节。那么此内存被.原创 2021-04-10 00:41:48 · 961 阅读 · 0 评论 -
C++ primer——基于面向对象解决方案的文本查询程序
目录(1)程序基本框架(2)查询案例分析a. 查询最简单的queryb. 最简单的“~”查询c. 最简单的“&”查询(1)程序基本框架其中需要注意的是:a. WordQuery类中的query本质上是单个词汇,因此指向WorkQuery对象的接口类对象是query的最小单元;b. NotQuery、AndQuery和OrQuery等类中的qu...原创 2020-03-24 14:29:35 · 159 阅读 · 0 评论 -
C++语法系列——引用的左值/右值之分
目录(1)为何要区分?(2)那什么是左值/右值引用?(3)左值?右值?(4)左值/右值,与左值/右值引用有什么区别?(1)为何要区分? 引用的类型是左值/右值,指明了其绑定的对象的状态是仍有可能被使用,or不再被使用甚至将被销毁。而对象的状态(左值/右值)又可决定,如何“拷贝”对象所拥有的动态资源——拷贝or接管。这一操作依赖类内的拷贝/移动构造函数以及拷贝/...原创 2020-03-22 17:45:33 · 185 阅读 · 0 评论 -
C++语法系列——类的五大拷贝控制成员:拷贝/移动构造函数,拷贝/移动赋值运算符,析构函数
目录(1)都长什么样?有何用处?(2)何时会被用到?(1)都长什么样?有何用处?a. 拷贝构造函数,要求第一个形参是类类型的(const)左值引用,若有其他形参(通常没有),则必须有默认值。形式如下:class A{private: int i; char *ptr; static string str;};A(const A&...原创 2020-03-21 18:49:46 · 564 阅读 · 0 评论 -
C++语法系列——理解lambda表达式
(1)什么是lambda表达式?形式上表现为匿名内联函数,具有参数列表、返回类型和函数体等组成部分,但又与普通函数有一定差别,即它还具有一个捕获列表,且可定义在函数内部。其形式如下:[ 捕获列表 ] ( 参数列表 )-> 返回类型 { 函数体 }(2)捕获列表有何用处?其用处与lambda表达式的特性有关。由于lambda表达式可定义在函数内部,因此lambda表达式可...原创 2020-03-20 23:29:22 · 373 阅读 · 0 评论 -
C++语法系列——解引用和自增运算符的易混淆用法,如*p++,*++p,++*p
(1)指针、解引用、自增混合使用的情况仅有*p++,*++p,++*p这三种吗?此问题可用排列知识解答。指针、解引用和自增这三种元素的排列方式共有种,但由于解引用必须位于指针之前,因此种类数减半。(2)如何弄清它们的运算过程?先要弄清,解引用和自增的运算优先级以及结合方向。解引用和自增的运算优先级相同,且结合方向均是从右向左,这意味着:*p++ ~ *(p++),*++p ~ *(...原创 2020-03-20 16:51:47 · 1249 阅读 · 0 评论 -
C++语法系列——怎样理解函数名
结论:在使用函数名时,可将函数名理解为一种特殊的指针,即指向自身的指针,再换句话说,指针存储的地址与自身的地址相同。可用以下程序验证:void fun() { int i = 0; }printf("fun = %p, *fun = %p, &fun = %p\n", fun, *fun, &fun);因此,在调用函数时,以下三种方式等价:fun() ===...原创 2020-03-18 23:49:08 · 351 阅读 · 0 评论 -
C++语法系列——const的顶层/底层之分
(1)先声明用处:顶层/底层通常用于修饰在定义指针时出现的const,即不可修改针对的是指针存储的地址,还是指向的对象a. 指针存储的地址不可修改,则const是顶层的,如 int* const ptr;b. 指针指向的对象(内容)不可修改,则const是底层的,如const int* ptr;c. 两者均不可修改,则一个const是顶层的,另一个const是底层的,如...原创 2020-03-18 23:10:44 · 179 阅读 · 0 评论 -
C++语法系列——隐式类类型转换
一、explicit(1)先声明用处:防止仅带一个形参的构造函数被用于隐式类类型转换(2)隐式类类型转换?以类A举例说明什么是隐式类类型转换及其本质class A{public: int age; string name;public: A() = default; A( int _age ): age( _age ) { };};void ...原创 2020-03-18 21:46:29 · 214 阅读 · 0 评论