c++
harderc111
精通是相对的,无知是绝对的,道阻且长
展开
-
C++ 日期和时间编程
日期和时间是编程中非常常用的功能。本文是对C++11到C++17中相关编程接口的介绍。原文地址:《C++ 日期和时间编程》 by 保罗的酒吧介绍C++中可以使用的日期时间API主要分为两类:C-style 日期时间库,位于<ctime>头文件中。这是原先<time.h>头文件的C++版本。chrono库:C++ 11中新增API,增加了时间点,时长和时钟等相关接口。在C++11之前,C++编程只能使用C-style日期时间库。其精度只有秒级别,这对于有高精度要求的程序转载 2021-11-02 22:59:02 · 3987 阅读 · 0 评论 -
C++ 并发编程(从C++11到C++17)
大佬写的润物细无声,比较系统地址:https://paul.pub/cpp-concurrency/转载 2021-11-01 22:31:22 · 204 阅读 · 0 评论 -
面向服务架构的L7代理和通信总线-Envoy
github: https://github.com/envoyproxy/envoy中文文档: https://github.com/lixiangyun/envoyproxy_doc_ZH_CNhttp://www.envoyproxy.cn/498704Envoy 是一个面向服务架构的L7代理和通信总线而设计的,这个项目诞生是出于以下目标:对于应用程序而言,网络应该是透明的,当发生网络和应用...原创 2018-03-03 01:42:52 · 3384 阅读 · 0 评论 -
c++时区转换收集
#include #include #include #include void getTimeTmp(std::string &timeTmp, std::string timezone){ time_t current_timet; time(¤t_timet);//得到当前时间秒数 std::map tzone;原创 2017-12-29 00:55:23 · 2344 阅读 · 0 评论 -
必须要注意的 C++ 动态内存资源管理(五)——智能指针陷阱
十三.小心使用智能指针 在前面几节已经很详细了介绍了智能指针适用方式。看起来,似乎智能指针很强大,能够很方便很安全的管理我们的资源。然而其实不然,如果不恰当的使用智能指针有时候会在很不起眼的地方造成内存泄漏。在这一节中主要介绍在使用智能指针过程中有哪些地方需要注意,以及 shared_ptr 在使用上的缺陷。十四.使用智能指针的5个条款条款1:不要把一个原生指针给多个shared_ptr或者转载 2017-11-26 22:00:24 · 286 阅读 · 0 评论 -
C++11及C++14标准的智能指针
C++11之前的智能指针auto_ptr出现的背景 C++11之前的智能指针是auto_ptr,一开始它的出现是为了解决指针没有释放导致的内存泄漏。比如忘了释放或者在释放之前,程序throw出错误,导致没有释放。所以auto_ptr在这个对象声明周期结束之后,自动调用其析构函数释放掉内存。int t = 3, m =4;auto_ptr<int> p1(&t);auto_ptr<const i转载 2017-11-26 14:11:54 · 631 阅读 · 0 评论 -
C++ 智能指针详解
一、简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。 用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括: std::auto_ptr、boost::scoped_ptr、boost::s转载 2017-11-26 01:45:55 · 233 阅读 · 0 评论 -
令牌桶算法实现收集
http://www-scf.usc.edu/~trigunay/token-bucket.html原创 2017-11-29 23:24:07 · 2060 阅读 · 0 评论 -
注意头文件规则,避免链接错误:重复定义(multiple defination)
地址:https://zybuluo.com/uuprince/note/81709 程序编译的时候遇到了一个重复定义的问题,研究一下发现自己在编译和链接过程中还有一些不清楚的地方,发文章总结一下。几个问题:头文件中只可以放置函数声明,不可以放置函数定义吗? 为什么有些头文件中直接把函数定义都写进去了? 模板函数/类中要求头文件中必须包含定义才能进行模板实例化,这种定义放在头...转载 2018-07-18 17:06:18 · 1774 阅读 · 0 评论 -
C++模板的特化详解(函数模版特殊,类模版特化)
地址:https://blog.csdn.net/gatieme/article/details/50953564模板特化:就是在实例化模板时,对特定类型的实参进行特殊处理,即实例化一个特殊的实例版本,当以特化定义时的形参使用模板时,将调用特化版本,模板特化分为全特化和偏特化;1. 函数模板的特化,只能全特化;//泛型版本template &lt;class T&gt; int ...原创 2018-09-10 23:21:05 · 7100 阅读 · 1 评论 -
【转】GCC同时使用静态库和动态库链接
1. 怎么指定静态库并恢复默认动态库连接在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库使用方式为:gcc test.cpp -L. -ltestlib如果当前目录下有两个库libtestlib.so libtetlib.a则肯定是连接 .so库。如果要指定为连接静态库则使用:gcc test.cpp -L. -static ...转载 2018-12-15 17:14:50 · 545 阅读 · 0 评论 -
【转】使用面向对象编程封装Thread虚函数和函数对象
C++11提供了thread,但是过于复杂,我们还是倾向于在项目中编写自己的Thread。Posix Thread的使用这里不再赘述。重点是这个函数:#include &lt;pthread.h&gt;int pthread_create(pthread_t *thread, const pthread_attr_t *attr, voi...转载 2019-01-06 16:47:05 · 623 阅读 · 0 评论 -
【转】c++之右值引用
从左值右值到右值引用地址:https://www.cnblogs.com/inevermore/p/4029753.htmlC++98中规定了左值和右值的概念,但是一般程序员不需要理解的过于深入,因为对于C++98,左值和右值的划分一般用处不大,但是到了C++11,它的重要性开始显现出来。C++98标准明确规定:左值是可以取得内存地址的变量。非左值即为右值。从这里可以看出,可以执行...转载 2019-01-06 19:42:01 · 303 阅读 · 0 评论 -
【转】C++动态绑定和虚函数表vtable (动态实现原理)
关于C++内部如何实现多态,对程序员来说即使不知道也没关系,但是如果你想加深对多态的理解,写出优秀的代码,那么这一节就具有重要的意义。 我们知道,函数调用实际上是执行函数体中的代码。函数体是内存中的一个代码段,函数名就表示该代码段的首地址,函数执行时就从这里开始。说得简单一点,就是必须要知道函数的入口地址,才能成功调用函数。找到函数名对应的地址,然后将函数调用处用该地址替换,这称为函数绑定,或...原创 2019-01-08 00:29:14 · 1321 阅读 · 0 评论 -
【转】数组的指针特性——数组名何时不退化成指针?何时退化成指针
地址:https://blog.csdn.net/dengheCSDN/article/details/78110957从一道小题下手(该考点曾被腾讯等大公司作为基础笔试题考过)#include <stdio.h> int size(char a[10]){ return sizeof(a);} int main(void){ char a[] = {...转载 2019-01-08 22:19:51 · 921 阅读 · 0 评论 -
[转】一致性哈希算法与C++实现
地址:https://blog.csdn.net/okiwilldoit/article/details/51352743转载 2019-01-25 01:59:03 · 684 阅读 · 0 评论 -
【转】C++中static用法总结
地址:https://www.cnblogs.com/qiaoconglovelife/p/5323086.html1.用于局部变量C++中局部变量有三种:(1)auto:此关键词常常省略。auto type a 常常简写为type a。如:int a=auto int a存储在内存的栈中,只在此局部区域有定义,程序执行过此局部区域自动释放。(2)static:有以下特点:声明在局...转载 2019-01-09 16:50:09 · 214 阅读 · 0 评论 -
【转】C/C++ 日常学习总结(第十九篇)多线程详解
这些讲解多线程文章都是非常好的,我这边就归结出一个<多线程详解>出来,感谢各位原创作者的辛苦劳动,这些收藏起来方便自己消化。解答地址:概念问答大牛专栏地址:https://blog.csdn.net/MoreWindows/column/info/killthreadseries...转载 2019-01-21 16:14:02 · 517 阅读 · 0 评论 -
关于gperftools
gperftools是Google提供的一套工具,其中的一个功能是CPU profiler,用于分析程序性能,找到程序的性能瓶颈。 安装gperftools:http://code.google.com/p/gperftools/downloads/listlibunwind:http://download.savannah.gnu.org/releases/libunwind转载 2017-11-14 19:20:44 · 329 阅读 · 0 评论 -
vector的内存释放
vector : C++ STL中的顺序容器,封装数组 1. vector容器的内存自增长 与其他容器不同,其内存空间只会增长,不会减小。先来看看"C++ Primer"中怎么说:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销转载 2017-10-26 11:39:06 · 164 阅读 · 0 评论 -
Protocol Buffer技术详解(语言规范)
写的很好,链接:点击打开链接该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo。这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流。需要说明的是,Blog的内容并非line by line的翻译,转载 2017-09-12 11:33:16 · 411 阅读 · 0 评论 -
c++观察者模式收集
观察者模式//// Created by caozw on 17-9-27.//#ifndef _OBSERVER_H_#define _OBSERVER_H_#include #include #include #include #include //观察者class Observer{public: Observer() {} virtual ~转载 2017-09-28 00:09:19 · 160 阅读 · 0 评论 -
c++ linux下安全启动进程收集
下面的功能有待验证,需要做一下试验void AnaUtil::startServ(std::string& servPath){ char servName[255] = {0}; if(getServName(servPath.c_str(),servName,sizeof(servName)) == false) { LOG_ERROR << "getServName erro原创 2017-08-26 18:43:41 · 973 阅读 · 0 评论 -
Leaf——美团点评分布式ID生成系统
链接地址:点击打开链接原创 2017-09-22 19:54:20 · 2069 阅读 · 0 评论 -
了解如何把vector和string数据传给旧的API
1、尽量使用vector和string替换数组,但是老的代码还是使用数组。如果老的接口期望是数组,怎么办? 需要把vector和string,暴露出数组接口,也就是第一个元素的地址。2、考虑方法DoSomething(const int* pInt,size_t size),对于vector vec,调用如下: DoSomething(&vec[0], v.size());转载 2017-09-13 10:29:53 · 230 阅读 · 0 评论 -
C++类型转换总结
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。const_cast,字面上理解就是去const属性。static_cast,命名上理解是静态类型转换。如int转换成char。dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多转载 2017-08-26 16:05:56 · 169 阅读 · 0 评论 -
STL的erase()陷阱-迭代器失效总结
下面材料整理自Internet&著作。STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。 在使用 list、set 或 map遍历删除某些元素时可以这样使用:正确使用方法1 std::l转载 2017-08-12 12:17:10 · 222 阅读 · 0 评论 -
关于boost::function与boost::bind函数的使用心得
最近开始写一个线程池,期间想用一个通用的函数模板来使得各个线程执行不同的任务,找到了Boost库中的function函数。Boost::function是一个函数包装器,也即一个函数模板,可以用来代替拥有相同返回类型,相同参数类型,以及相同参数个数的各个不同的函数。 1 #include 2 #include 3 typedef boost::functionint(int转载 2017-08-04 19:37:56 · 379 阅读 · 0 评论 -
面向对象的类关系及其C++实现
在面向对象的程序设计中,类之间有6中关系,分别是继承, 组合, 聚合,关联, 依赖,实现,如果使用C语言实现,上面的这些关系通过"结构体包含结构体、结构体包含结构体指针以及函数指针等语法实现",C语言本身的语法并不支持这些逻辑关系的实现,所以使用C语言实现面向对象的程序设计很多时候需要我们自己来关注某一种语法实现两个类之间到底是什么关系,但是C++/Java/Python等语言原生支持面向对象的程转载 2017-10-08 22:14:06 · 252 阅读 · 0 评论 -
乱写c++ serverno+timestamp+threadid生成制定长度字符串
#include#include #include #include #include #include #include #include using namespace std;int main(){ struct timeval tv; gettimeofday(&tv,NULL); pid_t num = syscall(SYS_getti原创 2017-09-21 23:24:34 · 243 阅读 · 0 评论 -
10个重要的Linux ps命令实战
Linux作为Unix的衍生操作系统,Linux内建有查看当前进程的工具ps。这个工具能在命令行中使用。PS 命令是什么查看它的man手册可以看到,ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。ps命令支持三种使用的语法格式UNIX 风格,选项可以组合在一起,并且选项前必须转载 2017-10-17 00:20:19 · 200 阅读 · 0 评论 -
C/C++程序CPU问题分析
转载地址:http://www.10tiao.com/html/473/201606/2651473094/1.html 程序的CPU问题是另外一类典型的程序性能问题,很多开发人员都受到过程序CPU占用过高的困扰。本次我们收集了14个CPU类的问题,和大家一起分析下这些问题的种类和原因。另外,对于C/C++程序而言,目前已经有了很多CPU问题定位的工具,本文也会进行比较分析。CPU问题分析 程序转载 2017-11-11 19:26:34 · 9623 阅读 · 1 评论 -
C++ 虚函数&纯虚函数&抽象类&接口&虚基类
多态在面向对象语言中,接口的多种不同实现方式即为多态。多态是指,用父类的指针指向子类的实例(对象),然后通过父类的指针调用实际子类的成员函数。转载 2017-10-15 12:34:24 · 300 阅读 · 0 评论 -
野(wild)指针与悬空(dangling)指针
1. 什么是野指针(wild pointer)?A pointer in c which has not been initialized is known as wild pointer.野指针(wild pointer)就是没有被初始化过的指针。例如,o foo1.c1 int main(int argc, char *argv[])2 {3 i转载 2017-10-03 20:52:44 · 1142 阅读 · 0 评论 -
CLion中使用CMake导入第三方库的方法
最近尝试使用CLion这款IDE来写C++程序。由于CLion的工程都是基于CMake来构建的,因此导入第三方库就需要在CMake文件中进行配置。这里把利用CMake导入第三方库的过程记录下来。CMake的配置信息写在了CMakeList.txt文件中。在CMakeList.txt文件里,我们首先定义两个变量INC_DIR和LINK_DIR,用来表示头文件路径和库的路径。这里以我放在Dow转载 2017-10-03 02:21:03 · 32536 阅读 · 3 评论 -
linux下编译安装boost库
1、下载并解压boost 1.58 源代码可以去boost的官网下载,这里提供一个下载地址下载wget http://jaist.dl.sourceforge.net/project/boost/boost/1.58.0/boost_1_58_0.tar.bz2解压tar -xjf boost_1_58_0.tar.bz22、运行bootstrap.sh转载 2017-10-03 00:30:51 · 349 阅读 · 0 评论 -
Rapidjson的简单使用(拼接json串,存取文件中的json,解析json串)
中文教程:点击打开链接先放个目录:Rapidjson的简单使用示例rapidjson官方教程本示例所用环境示例代码与注释rapidjson官方教程如果要想深入学习rapidjson工具,官方文档肯定是必须看一看的。官方教程里面的讲解才是最详细,最权威的了。本示例所用环境引擎版本:cocos2d-转载 2017-09-22 10:10:34 · 7171 阅读 · 0 评论 -
C++中的函数指针和函数对象总结
篇一、函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数。函数指针的声明方法:数据类型标志符 (指针变量名) (形参列表);一般函数的声明为: int func ( int x );而一个函数指针的声明方法为:int (*fu转载 2017-08-03 16:32:22 · 209 阅读 · 0 评论