final和override finalC++ 中增加了 final 关键字来限制某个类不能被继承,或者某个虚函数不能被重写。如果使用 final 修饰函数,只能修饰虚函数,并且要把 final 关键字放到类或者函数的后面。 修饰函数如果使用 final 修饰函数,只能修饰虚函数,这样就能阻止子类重写父类的这个函数: 123456789101112131415161718192021222324252627class Base 2021-09-15 #C++11
右值引用 右值C++11 增加了一个新的类型,称为右值引用(R-value reference),标记为 &&。介绍右值引用类型之前,先了解什么是左值和右值:(1)左值 lvalue(loactor value)是指存储在内存中、有明确存储地址的数据(可以取地址)。(2)右值 rvalue(read value)是指可以提供数据值的数据(不可以取地址)。 区分左值与右值的便捷方法:(1)对表 2021-09-14 #C++11
lambda 表达式 基本用法lambda 表达式是 C++11 最常用的特性之一,这是现代编程语言的一个特点,lambda 表达式的优点:(1)声明式的编程风格:匿名定义目标函数或函数对象,不需要额外写一个命名函数或函数对象。(2)简洁:避免了代码膨胀和功能分散,让开发更加高效。(3)在需要的时间和地点实现功能闭包,使程序更加灵活。lambda 表达式定义了一个匿名函数,并且可以捕获一定范围内的变量。 lambda 2021-09-14 #C++11
constexpr const在 C++11 之前只有 const 关键字,从功能上来说这个关键字有双重语义:变量只读,修饰常量。示例如下: 12345678910111213void func(const int num){ const int count = 24; // int array[num]; // error,num 是一个只读变量,不是常量 int ar 2021-09-13 #C++11
C++11 原始字面量 nullptr constexpr 自动类型推导 final和override 模板的优化 using 委托构造和继承构造 列表初始化 基于范围的 for 循环 可调用对象包装器、绑定器 lambda表达式 右值引用 转移和完美转发 共享智能指针 独占智能指针 弱引用智能指针 参考资料https://subingwen.cn/cplusplus/https://subingwen.cn 2021-09-12 #总结
nullptr 指针空值类型 nullptr在 C++ 程序开发中,为了提高程序的健壮性,一般会在定义指针的同时完成初始化操作,或者在指针的指向尚未明确的情况下,都会给指针初始化为 NULL,避免产生野指针(没有明确指向的指针,操作这种指针可能导致程序发生异常)。C++98/03 标准中,将一个指针初始化为空指针的方式有两种: 12char *ptr = 0;char *ptr = NULL; 底层源码中 NUL 2021-09-12 #C++11
原始字面量 原始字面量在 C++11 中添加了定义原始字符串的字面量,定义方式为:R "xxx(原始字符串)xxx",()两边的字符串可以省略。原始字面量 R 可以直接表示字符串的实际含义,而不需要额外对字符串做转译等操作。 在编程过程中,使用的字符串中常带有一些特殊字符,对于这些字符往往要做的处理,使用了原始字面量可以轻松的解决这个问题,比如打印路径: 12345678910111213 2021-09-12 #C++11
IO多路复用 IO 多路复用的介绍IO 多路转接也称为 IO 多路复用,它是一种网络通信的手段(机制),通过这种方式可以同时监测多个文件描述符并且这个过程是阻塞的,一旦检测到有文件描述符就绪(读数据/写数据)程序的阻塞就会被解除,之后就可以基于这些(一个或多个)就绪的文件描述符进行通信。通过这种方式在单进程/线程的场景下也可以在服务器端实现并发。常见的 IO 多路转接方式有:select、p 2021-09-09 #网络编程
手写线程池-C++版 重写C++版C 语言版的线程池改为 C++ 版,这样代码从使用和感观上都会更简洁一些。从 C 到 C++ 的迁移主要用到了 C++ 三大特性中的封装。线程池按照面向对象的思想进行拆分可以分为两部分:(1)任务队列类(2)线程池类 任务队列类声明,TaskQueue.hTask 是任务类,有两个成员分别是两个指针 void(*)(void*) 和 void*TaskQueue 是任务队列,提供了添加 2021-08-31 #线程
手写线程池-C语言版 线程池原理使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为创建线程和销毁线程需要时间。 有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是继续执行其他的任务呢?线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动 2021-08-31 #线程