随笔分类 -  C++

摘要:一、编译开源库的传统方法 Windows 下开发 C/C++ 程序,少不了编译开源的第三方库。比如用于网络连接的高性能库 libcurl、用于压缩解压的 zlib 等等。使用这些库开发极大的方便了程序员,使得我们不必重复造轮子。但是使用这些库必须要处理以下问题。 编译方式 由于这些开源库绝大部分都来 阅读全文
posted @ 2021-04-24 11:44 fengMisaka 阅读(23909) 评论(2) 推荐(6) 编辑
摘要:C++11 引入了右值引用,本文从实用角度出发,用尽量通俗易懂的语言讲清左右值引用的原理,性能分析及其应用场景,帮助大家在日常编程中用好右值引用和 std::move。 一、什么是左值、右值 首先不考虑引用以减少干扰,可以从 2 个角度判断:左值可以取地址、位于等号左边;而右值没法取地址,位于等号右 阅读全文
posted @ 2021-04-21 21:24 fengMisaka 阅读(1344) 评论(0) 推荐(1) 编辑
摘要:五、技巧 当设计 C++软件时, 总会再三地受到一些问题的困扰。 你如何让构造函数和非成员函数具有虚拟函数的特点? 你如何限制一个类的实例的数量? 你如何防止在堆中建立对象呢?你如何又能确保把对象建立在堆中呢?其它一些类的成员函数无论何时被调用, 你如何能建立一个对象并让它自动地完成一些操作?你如何 阅读全文
posted @ 2021-04-21 19:04 fengMisaka 阅读(350) 评论(1) 推荐(1) 编辑
摘要:四、效率 本章的内容从两个角度阐述效率的问题。第一是从语言独立的角度,关注那些你能在任何语言里都能使用的东西。C++ 为它们提供了特别吸引人的实现途径,因为它对封装的支持非常好,从而能够用更好的算法与数据结构来替代低效的类似实现,同时接口可以保持不变。 第二是关注 C++ 语言本身。高性能的算法与数 阅读全文
posted @ 2021-04-21 19:03 fengMisaka 阅读(1499) 评论(1) 推荐(0) 编辑
摘要:一、C++ 内存区域 C++ 内存分为 5 个区域: 堆 heap : 由 new 分配的内存块,其释放编译器不去管,由程序员自己控制。如果程序员没有释放掉,在程序结束时系统会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”。 栈 stack : 是那些编译器在需要时分配,在不需要时自动清除的存储 阅读全文
posted @ 2021-04-13 20:07 fengMisaka 阅读(1113) 评论(0) 推荐(0) 编辑
摘要:一、stdfunction与stdbind双剑合璧 因为类成员函数都有一个默认的参数,this,作为第一个参数,这就导致了类成员函数不能直接赋值给std::function,这时候我们就需要std::bind了,简言之,std::bind的作用就是转换函数签名,将缺少的参数补上,将多了的参数去掉,甚 阅读全文
posted @ 2021-03-25 10:03 fengMisaka 阅读(7396) 评论(0) 推荐(5) 编辑
摘要:在理解“回调函数”之前,首先讨论下函数指针的概念。 一、函数指针概述 指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种 阅读全文
posted @ 2021-03-25 10:02 fengMisaka 阅读(7005) 评论(1) 推荐(2) 编辑
摘要:转自:陪她去流浪的C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现 前言 大家都应该知道C的精髓是虚函数吧? 虚函数带来的好处就是: 可以定义一个基类的指针, 其指向一个继承类, 当通过基类的指针去调用函数时, 可以在运行时决定该调用基类的函数还是继承类的函数. 虚函数是实现多态(动态绑 阅读全文
posted @ 2021-03-25 09:52 fengMisaka 阅读(528) 评论(0) 推荐(0) 编辑
摘要:一、weak_ptr弱引用的智能指针 1.1 shared_ptr相互引用会有什么后果? shared_ptr的一个最大的陷阱是循环引用,循环引用会导致堆内存无法正确释放,导致内存泄漏。看下面的例子: #include <iostream> #include <memory> class Paren 阅读全文
posted @ 2021-03-25 09:48 fengMisaka 阅读(1193) 评论(0) 推荐(1) 编辑
摘要:C++ 程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。但使用普通指针,容易造成内存泄露(忘记释放)、二次释放、程序发生异常时内存泄露等问题等。所有 C++11 就引入了智能指针。 一、原始指针容易发生内存泄漏 C 语言中最常使用的是malloc()函数分配内存,free 阅读全文
posted @ 2021-03-25 09:43 fengMisaka 阅读(1092) 评论(0) 推荐(0) 编辑
摘要:一、C++11为什么要引入Lambda表达式? 编写程序时,往往会大量用到函数,为此要编写很多类。有的类只用来定义了一个函数成员,而且这个函数也只使用了一次,编写这样的类就有点浪费。而且,定义类的地方和使用成员函数的地方可能相隔较远,查看其 operator() 成员函数也比较麻烦。 对于只使用一次 阅读全文
posted @ 2021-03-25 09:31 fengMisaka 阅读(481) 评论(0) 推荐(0) 编辑
摘要:一、C++11为什么要引入std::bind? C++11 引入了std::bind,顾名思义,是用来绑定函数调用的某些参数的。std::bind能改造现有函数,生成新的函数。举例说明,现在有这么个函数声明: int f(int a, int b); 我现在需求,我要一个有 2 个 int 类型参数 阅读全文
posted @ 2021-03-25 09:24 fengMisaka 阅读(418) 评论(0) 推荐(1) 编辑
摘要:博客《C++11 新特性总结》描述了一些 C++11 带来的新的特性,但是不够全面。所以写该博客做一个简要补充。在实际工作中,std::function 经常用来实现回调函数。 一、C++11为什么要引入std::function? 在 C++03 的时代,是使用函数指针来把一个函数作为参数传递,这 阅读全文
posted @ 2021-03-25 09:21 fengMisaka 阅读(1017) 评论(0) 推荐(1) 编辑
摘要:## 一、什么是库 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a 或 .lib)和动态库(.so 或 .dll) 阅读全文
posted @ 2019-12-17 22:49 fengMisaka 阅读(4000) 评论(2) 推荐(2) 编辑
摘要:C11 是 C 程序设计语言标准的一个新的版本,在 2011 年由 ISO 批准并发布。C11 新标准从而代替了原来的 C98 和 C03.。C11 标准是对 C++ 的一次巨大的改进和扩充。在核心语法,STL 标准模板等方面增加众多新功能,新亮点。例如新增 auto,deltype,nullptr 阅读全文
posted @ 2019-09-27 21:29 fengMisaka 阅读(12252) 评论(0) 推荐(1) 编辑
摘要:一、函数重载 1.1 重载的起源 自然语言中,一个词可以有许多不同的含义,即该词被重载了。人们可以通过上下文来判断该词到底是哪种含义。“词的重载”可以使语言更加简练。例如“吃饭”的含义十分广泛,人们没有必要每次非得说清楚具体吃什么不可。别迂腐得象孔已己,说茴香豆的茴字有四种写法。 在 C++程序中, 阅读全文
posted @ 2019-08-06 16:27 fengMisaka 阅读(1380) 评论(0) 推荐(0) 编辑
摘要:访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问。三种继承方式分别是 public 继承,protect 继承,private 继承。 示例程序如下: c++ include include 阅读全文
posted @ 2019-08-06 16:14 fengMisaka 阅读(4792) 评论(0) 推荐(2) 编辑
摘要:程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本节的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 一、内存分配方式 内存分配方式有三种: (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好 阅读全文
posted @ 2019-08-06 11:02 fengMisaka 阅读(2395) 评论(0) 推荐(0) 编辑
摘要:C/C++中的关键字如下: 下面我们主要介绍一些比较陌生的关键字,一些常见的关键字这里就不再赘述了。 1、asm asm 是一个语句的分隔符,不能单独出现,必须接汇编指令。一组被大括号包含的指令或一对空括号。示例如下: 也可以在每个汇编指令前加_asm: 2、catch、throw、try 用于异常 阅读全文
posted @ 2019-07-15 16:17 fengMisaka 阅读(782) 评论(0) 推荐(0) 编辑
摘要:C++ 程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。但使用普通指针,容易造成内存泄露(忘记释放)、二次释放、程序发生异常时内存泄露等问题等。所有 C++11 就引入了智能指针。 一、原始指针容易发生内存泄漏 C 语言中最常使用的是malloc()函数分配内存,free 阅读全文
posted @ 2019-02-20 22:37 fengMisaka 阅读(7860) 评论(0) 推荐(3) 编辑

点击右上角即可分享
微信分享提示