摘要: 下文先从C++11引入的几个规则,如引用折叠、右值引用的特殊类型推断规则、static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std::move和std::forward本质就是一个转换函数,std::move执行到右值的无条件转换, 阅读全文
posted @ 2021-08-25 22:33 默行于世 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 类型转换机制可以分为:隐式类型转换 和 显示类型转换(强制类型转换) C中的类型转换: 事情要从头说起,这个头就是C语言.我们已经习惯了使用C-like类型转换,因为它强大而且简单. 主要有一下两种形式: (new-type) expression new-type (expression) C++ 阅读全文
posted @ 2021-08-25 22:01 默行于世 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 使用过c语言的都知道malloc是一个动态分配内存的函数,还可以通过free释放内存空间。如果我们想分析一下malloc的源码,这其实不是一会就能看懂的,但是我们可以讨论一下malloc的简单实现。在这之前,我们先来看一下虚拟内存空间。 虚拟内存空间时操作系统实现内存管理的一种机制。操作系统为每个进 阅读全文
posted @ 2021-08-25 21:46 默行于世 阅读(1390) 评论(0) 推荐(0) 编辑
摘要: 一、前言 由于 C 和 C++ 这两种语言血缘非常近,本文亦对 C 编程语言有借鉴作用; 二、C++ 崩溃分类 一切的偶然并非偶然 在编程实践中,遭遇到了诸如内存无效访问、无效对象、内存泄漏、堆栈溢出等很多C / C++ 程序员常见的问题,最后都是同一个结果:程序崩溃,为解决崩溃问题,过程都是非常让 阅读全文
posted @ 2021-08-25 21:38 默行于世 阅读(1193) 评论(0) 推荐(0) 编辑
摘要: 结论 C++编译器不允许这种做法,会报编译错误.(这是C++未定义的行为) C编译器如GCC一般不会报错,但返回的值不确定: 原理:函数声明时的返回类型指明,函数出栈后要去寄存器中取值(取出来的是return值的地址),函数中没有return,只是没有给这个寄存器存入合法的值。出栈后还是会去读寄存器 阅读全文
posted @ 2021-08-25 21:13 默行于世 阅读(3237) 评论(0) 推荐(0) 编辑
摘要: 1. 饿汉模式 使用饿汉模式实现单例是十分简单的,并且有效避免了线程安全问题,因为将该单例对象定义为static变量,程序启动即将其构造完成了。代码实现: class Singleton { public: static Singleton* GetInstance() { return singl 阅读全文
posted @ 2021-08-25 20:40 默行于世 阅读(504) 评论(0) 推荐(0) 编辑
摘要: template <class Fn, class... Args> void call_once (once_flag& flag, Fn&& fn, Args&&...args); 需要包含头文件:<mutex> 参数: (1)flag:是std::once_falg对象(定义一个该对象传进去即 阅读全文
posted @ 2021-08-25 20:27 默行于世 阅读(1428) 评论(0) 推荐(0) 编辑
摘要: 1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明: A volatil 阅读全文
posted @ 2021-08-25 20:13 默行于世 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 1.禁用继承 C++11中允许将类标记为final,方法时直接在类名称后面使用关键字final,如此,意味着继承该类会导致编译错误。 实例如下: class Super final { //...... }; 2.禁用重写 C++中还允许将方法标记为fianal,这意味着无法再子类中重写该方法。这时 阅读全文
posted @ 2021-08-25 19:55 默行于世 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 单参数构造函数 单参数构造函数作为隐含的类型转换符号 C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有缺省值的多参构造函数),承担了两个角色。 1.用于构建单参数的类对象 2.隐含的类型转换操作符. 例如一个类A的构造函数A(int i)就是,既可以用来作为构造器,又可以实现隐式转换A 阅读全文
posted @ 2021-08-25 16:21 默行于世 阅读(3746) 评论(0) 推荐(0) 编辑
摘要: 编译器默认为一个类生成的默认函数 1.默认构造函数 2.默认析构函数 3.默认拷贝构造函数 4.默认赋值函数 5.移动构造函数 6.移动拷贝函数 class DataOnly { public: DataOnly () // default constructor ~DataOnly () // d 阅读全文
posted @ 2021-08-25 16:03 默行于世 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 虚析构函数 类型需要虚析构函数的另外一个特征 是该类型具有指针成员或引用成员。如果有指针成员和引用成员,则该类型通常需要实现析构函数以及拷贝操作。 通常,一个实现了析构函数的类型同时也需要实现拷贝构造函数与拷贝复制函数。 作为一个经验法则: 如果你有一个带有虚函数功能的类,则它需要一个虚析构函数,原 阅读全文
posted @ 2021-08-25 15:55 默行于世 阅读(57) 评论(0) 推荐(0) 编辑
摘要: delete p 执行了哪些步骤? delete p 是一个两步的过程:调用析构函数(释放类里边涉及new的内存),然后释放内存(类本身占的内存)。 delete p产生的代码看上去是这样的(假设是Object*类型的): delete原语可以看作如下这样一个过程: p->~Object(); p- 阅读全文
posted @ 2021-08-25 15:30 默行于世 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 《C++ Primer》中提到: “可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换。” 这里应该注意的是, “可以用单个形参进行调用” 并不是指构造函数只能有一个形参,而是它可以有多个形参,但那些形参都是有默认实参的。 那么,什么是“隐式转换”呢? 上面这句话也说 阅读全文
posted @ 2021-08-25 15:00 默行于世 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 递归查询 • 如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让该主机自己进行下一步的查询 • 因此,递归查询返回的查询结果或是所要查询的IP地址,或是报错,表示无法查询到所需的IP地址 阅读全文
posted @ 2021-08-25 14:49 默行于世 阅读(1320) 评论(0) 推荐(0) 编辑
摘要: TCP UDP优缺点对比 1 TCP优点 可靠,稳定 可靠性体现在传输数据之前,三次握手建立连接(四次挥手断开连接),并且在数据传递时,有确认,窗口,重传,拥塞控制机制,数据传完之后断开连接来节省系统资源 2 TCP缺点 慢,效率比较低,占用系统资源,容易被攻击 传输数据之前建立连接,会消耗时间;消 阅读全文
posted @ 2021-08-25 14:47 默行于世 阅读(349) 评论(0) 推荐(0) 编辑
摘要: Quic 全称 quick udp internet connection “快速 UDP 互联网连接”,由 google 提出的使用 udp 进行多路并发传输的协议. 为什么需要QUIC 1. 协议历史悠久导致中间设备僵化 2. 依赖于操作系统的实现导致协议本身僵化 3. 建立连接的握手延迟大 a 阅读全文
posted @ 2021-08-25 14:39 默行于世 阅读(900) 评论(0) 推荐(0) 编辑
摘要: HTTPS SSL握手和加密原理 HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。 1.客户端发出请求,明文传输 阅读全文
posted @ 2021-08-25 14:31 默行于世 阅读(925) 评论(0) 推荐(0) 编辑
摘要: URI结构 示例 • 协议部分:https: //分隔符 • 域名:If.snssdk.com 发送请求是,需要向DMS服务器解析IP • 端口(非必须):http 80,https 443,端口不是必须部分,默认端口可省略不写 • 虚拟目录部分(非必须):域名的第一个/开始到最后一个/为止 ○ 本 阅读全文
posted @ 2021-08-25 14:22 默行于世 阅读(299) 评论(0) 推荐(0) 编辑
摘要: 多路复用 并发请求 2.0采用多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比1.1大了好几个数量级 多路复用概念 即连接共享,即每一个request都是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的 阅读全文
posted @ 2021-08-25 14:17 默行于世 阅读(45) 评论(0) 推荐(0) 编辑