![](https://img-blog.csdnimg.cn/886c12ab317d4007b647801beeb00c71.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
文章平均质量分 95
C++ 编程相关
FlyWine
They go low, we go high!
展开
-
Linux之动态链接库
动态链接库正确的名字叫共享库,英文 Shared Library。在windows下表现为 文件,在linux下表现为 文件。之所以叫共享库,是因为多个独立的程序可以共同使用同一个共享库,达到减少执行文件的大小,直到运行时才动态加载,节省磁盘空间和内存空间。下面通过一个案例深入了解动态库的使用。main.cpp 用来生成可执行程序。该程序依赖于一个random库,库的源码如下:现在,我们用clang++编译器编译这个程序。(clang++与g++类似,但更适合于开发,可以sudo apt inst原创 2023-07-20 16:40:08 · 1396 阅读 · 0 评论 -
C++将地址转换为字符串
C++将地址转换为字符串有时候在做程序设计的时候,有可能需要做一个类似messageBus的功能,并且需要一个key保证唯一,那么如何实现这个key的唯一呢?大致两种思路:使用函数签名,因为messagebus绑定的是一个函数,并且对应一个topic,但是为了能够自适应各式各样的函数,就需要模板和元编程来解决,但是这样的局限很大,有一些函数我们是无法获取签名的(你一定会需要的);使用函数地...原创 2019-05-29 11:05:50 · 7099 阅读 · 0 评论 -
C++ 判断类是否有某变量
C++ 判断类是否有某变量话不多说上代码。#define HAS_MEMBER(member)\ template<typename T, typename... Args>struct has_member_##member\{\ private:\ template<typename U> static auto Check(int) -&...原创 2019-05-18 17:17:30 · 3060 阅读 · 1 评论 -
C++通过原子变量代替互斥量
C++通过原子变量代替互斥量废话不多说,直接上代码。实现类似lock_guard功能#include <atomic>#include <thread>class ClockGuard{public: ClockGuard(std::atomic_flag & atomic):m_lockedFlag(atomic) { ...原创 2019-04-06 17:46:52 · 2558 阅读 · 0 评论 -
什么是递归函数?
递归函数递归例题特点效率优点递归函数递归递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。 当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。 所以递归要有两个要素,结束条件与递推关系注:递归的时候,每次调用一个函数,计算机都会为这个函数分配新的空间,这就是说,当...原创 2018-02-21 09:42:10 · 130572 阅读 · 18 评论 -
C++类型萃取之type_traits和type_info
类型萃取类型判断typeiddecltype和declvalenable_if类型萃取通过type_traits可以实现在编译期计算、查询、判断、转换和选择,增强了泛型编程的能力,也增强了我们程序的弹性,让我们能够在编译期就能够优化改进甚至排错,进一步提高代码质量。 头文件 #include 类型判断type_trits提供了丰富的编译期计算...原创 2018-02-11 17:07:48 · 3325 阅读 · 0 评论 -
C++11新特性之泛型编程与模板
模板泛型编程函数模板普通函数模板成员函数模板函数模板重载模板函数的特化类模板类模板中的成员函数模板类模板的特化与偏特化类模板成员特化模板Template所代表的泛型编程是C++语言中的重要组成部分。泛型编程泛型编程(Generic Programming)是一种语言机制,通过它可以实现一个标准的容器库。 像类一样,泛型也是一种抽...原创 2018-02-11 12:52:04 · 4381 阅读 · 0 评论 -
C++11新特性之左值右值及移动语句与完美转发
C左值右值左值和右值的由来什么是左值和右值左值右值的本质引用左值引用右值引用移动语句与完美转发移动语句实现移动构造函数和转移赋值函数stdmove完美转发Perfect ForwardingC++左值右值 自从C++11发布之后,出现了一个新的概念,即左值和右值,英文为lvalue和rvalue,这两个是比较晦涩难懂的基础概念,为什...原创 2018-02-11 01:18:13 · 2001 阅读 · 2 评论 -
宏定义基本用法
宏定义不带参数宏定义又称为宏代换、宏替换,简称“宏”。格式:#define 标识符 字符串其中的标识符就是所谓的符号常量,也称为“宏名”。 预处理(预编译)工作也叫做宏展开:将宏名替换为字符串。 掌握”宏”概念的关键是“换”。一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”。例:#define Pi 3.1415926把程序中出现的Pi全部换成3.1415926带参数(宏函数)宏名原创 2017-12-05 09:30:32 · 849 阅读 · 0 评论 -
boost序列化(Serialization)
程序开发中,序列化是经常需要用到的。像一些相对高级语言,比如JAVA, C#都已经很好的支持了序列化,那么C++呢?当然一个比较好的选择就是用Boost,这个号称C++准标准库的东西。什么时候需要序列化呢?举个例子,我们定义了一个class,比如:class CCar{public: void SetName(std::string& strName){m_strName = s转载 2017-10-21 20:28:56 · 635 阅读 · 0 评论