C++
章鱼、不嚎
这个作者很懒,什么都没留下…
展开
-
C++中的 extern "C" {}
#ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } 在C++项目源码中,经常会有上述代码,接下来我们将要介绍一下,它们到底有什么用。 1、#ifdef _cplusplus 和#endif _cplusplus 我们知道 #ifdef/#endif、#ifndef/#endif用于条件编译,#ifdef _c...原创 2019-11-14 13:06:42 · 155 阅读 · 0 评论 -
lambda 表达式
Lambda函数也就是一个函数,它的语法定义如下: [capture](parameters) mutable ->return-type{statement} (1)[capture]:捕捉列表。捕捉列表总是出现在Lambda函数的开始处。实际上,[]是Lambda引出符。编译器根据该引出符判断接下来的代码是否是Lambda函数。捕捉列表能够捕捉上下文中的变量以供Lambda函数使用; (...转载 2019-11-13 14:17:15 · 322 阅读 · 0 评论 -
Effective C++
effective C++ 视 C++ 为一个语言联邦(C、Object-Oriented C++、Template C++、STL) 宁可以编译器替换预处理器(尽量以 const、enum、inline 替换 #define) 尽可能使用 const 确定对象被使用前已先被初始化(构造时赋值(copy 构造函数)比 default 构造后赋值(copy assignment)效率高) 了解 C...原创 2019-11-03 13:11:16 · 302 阅读 · 0 评论 -
new 和 malloc 的区别
new 和 malloc 的区别 1、申请内存所在的位置不同 new 操作从自由存储区上为对象动态分配内存空间。 malloc 函数从堆上动态分配内存。 自由存储区:凡是经过new申请的内存,都是自由存储区; 堆:是操作系统中维护的一块特殊内存,用于程序的内存动态分配; 自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取决于operator new 的实现细节。自由存储区...原创 2019-11-03 10:56:26 · 226 阅读 · 0 评论 -
进程和线程
进程和线程 7.1 线程和进程的关系 (1)一个线程只能属于一个进程,一个进程可以有多个线程。 (2)资源分配给一个进程时,该进程下的所有线程共享该资源。 (3)线程在执行时需要协作同步。不同进程的线程需要利用消息通信的办法实现同步。 (4)真正在处理机上运行的是线程。 (5)线程是指进程内的一个执行单元,也是进程内的可调度实体。 7.2 线程和进程的区别 (1)调度:线程是调度和分配的基本单位;...原创 2019-11-02 15:33:31 · 115 阅读 · 0 评论 -
静态链接库和动态链接库
1、静态库 在链接阶段,将汇编生成的目标文件 .o 与引用的库一起链接,打包到可执行文件中,因此对应的链接方式成为静态链接。一个静态库可以简单看成是一组目标文件(.o/.obj文件)的集合,即很多目标文件经过压缩打包后形成的一个文件。 静态链接库的特点: 1、静态库对函数库的链接是放在编译时期完成的。 2、程序在运行时与函数库再无瓜葛,移植方便。 3、浪费空间和资源,因为所有相关的目标文件与牵涉...原创 2019-11-02 15:31:31 · 250 阅读 · 0 评论 -
四种强制类型转换
四种强制类型转换 c++动态类型转换有四种const_cast、static_cast、dynamic_cast、reinterpreter_cast。 这四种动态类型转换的方法其实都很接近: cast-name <typename> (expression) 其中cast-name为static_cast、dynamic_cast、const_cast 和 reinterpret_...原创 2019-11-02 15:30:18 · 1289 阅读 · 0 评论 -
虚函数表
虚函数表 C++中的虚函数的作用主要是实现了多态的机制。 多态:就是用父类型的指针指向其子类的实例。 虚函数是通过一张虚函数表(Virtual Table)实现的。在这个表中,主要是一个类的虚函数地址表,这张表解决了继承和覆盖等问题。就像一张地图一样,指明了指针实际所应该调用的函数。 举个例子: class Base{ public: virtual void f() {cout &...原创 2019-11-02 15:24:58 · 762 阅读 · 0 评论 -
智能指针
智能指针 智能指针的行为类似常规指针,重要的区别是它负责自动释放所指向的对象。C++11新提供的两种智能指针的区别在于管理底层指针的方式: shared_ptr 允许多个指针指向同一个对象。unique_ptr 独占所指向的对象。标准库中还定义了一种名为 weak_ptr的指针,它是一种弱引用,指向share_ptr 所管理的对象。这三个指针都定义在 memory 头文件中。 1、shared_p...原创 2019-11-02 15:19:02 · 142 阅读 · 0 评论