C++
文章平均质量分 71
G1036583997
这个作者很懒,什么都没留下…
展开
-
C++11 右值引用
转载自:http://www.cnblogs.com/hujian/archive/2012/02/13/2348621.html C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是转载 2015-12-04 15:22:56 · 406 阅读 · 0 评论 -
C++11系列-lambda函数
C++11一个最激动人心的特性是支持创建lambda函数(有时称为闭包)。这意味着什么?一个Lambda函数是一个可以内联写在你代码中的函数(通常也会传递给另外的函数,类似于仿函数或函数指针)。使用Lambda,创建机动函数会更简单,而以前你必须创建一个有名函数。在这篇文章中,我先用一些例子解释为什么lambda很酷,然后我会讲解可能会用到的关于lambda的所有细节。为什么Lambda很转载 2017-02-07 11:39:31 · 358 阅读 · 0 评论 -
如何用auto、decltype和新的函数语法编写更好的代码
2013-08-08C++11引入了一些新的实用的类型推导能力,这意味着你可以花费更少的时间去写那些编译器已经知道的东西。当然有些时候你需要帮助编译器或者你的编程伙伴。但是C++11,你可以在一些乏味的东西上花更少的时间,而多去关注逻辑本身。auto之乐我们先快速回顾一下auto,万一你没有读第一篇C++11文章中关于auto的部分。在C++11中,如果编译器在定义一个转载 2017-02-07 11:38:18 · 495 阅读 · 0 评论 -
C++11系列-区间迭代
C++11系列-区间迭代2013-08-20在我前面介绍C++11的文章中,我提到C++11将会带来一些实用的改进。我的意思是它将移除一些不必要的打字和其它影响快速编码的壁垒。我前面讲过的auto关键字就是一个例子;现在我想讲一下区间迭代(range-based for loop)。区间迭代的基本语法近来,基本上所有现代编程语言都有一种对一个区间写for循环转载 2017-02-07 11:40:56 · 3455 阅读 · 0 评论 -
linux 音频采集基础知识普及
转自:http://blog.csdn.net/calculatorw/article/details/8814255虽然目前Linux的优势主要体现在网络服务方面,但事实上同样也有着非常丰富的媒体功能,本文就是以多媒体应用中最基本的声音为对象,介绍如何在Linux平台下开发实际的音频应用程序,同时还给出了一些常用的音频编程框架。一、数字音频音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二转载 2017-01-20 10:35:40 · 5767 阅读 · 0 评论 -
Linux声音
转载自:http://www.cnblogs.com/jiqingwu/p/linux_sound_system.htmlLinux声音系统有些混乱,它有三套音频驱动: OSS (Open Sound System), 商业版的OSS,和ALSA (Advanced Linux Sound Architechture)。 所以底层驱动有OSS和ALSA两套API。一、声卡的工作原理转载 2017-01-20 10:46:30 · 1547 阅读 · 0 评论 -
Alsa音频编程【精华】
转载自:http://blog.csdn.net/tianshuai1111/article/details/8191711前序:这里了解一下各个参数的含义以及一些基本概念。 样本长度(sample):样本是记录音频数据最基本的单位,常见的有8位和16位。 通道数(channel):该参数为1表示单声道,2则是立体声。 桢(fra转载 2017-01-21 16:25:37 · 1307 阅读 · 0 评论 -
linux内核数据结构之kfifo
转载自:http://www.cnblogs.com/Anker/p/3481373.html1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处转载 2017-01-23 14:18:45 · 1149 阅读 · 0 评论 -
观察者模式与发布/订阅模式区别
在翻阅资料的时候,有人把观察者(Observer)模式等同于发布(Publish)/订阅(Subscribe)模式,也有人认为这两种模式还是存在差异,而我认为确实是存在差异的,本质上的区别是调度的地方不同。观察者模式比较概念的解释是,目标和观察者是基类,目标提供维护观察者的一系列方法,观察者提供更新接口。具体观察者和具体目标继承各自的基类,然后具体观察者把自己注册到具体目标里,在具体目标发转载 2017-03-09 08:29:28 · 2212 阅读 · 0 评论 -
用C++11的std::async代替线程的创建
转载自:http://www.cnblogs.com/qicosmos/p/3534211.html?utm_source=tuicool&utm_medium=referralc++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的:void f(int n);std::thread t(f, n + 1);t.join(); 但是线程毕竟是属于转载 2017-03-09 09:08:02 · 358 阅读 · 0 评论 -
C语言宏中"#"和"##"的用法
转载自:http://www.cnblogs.com/hnrainll/archive/2012/08/15/2640558.html在查看linux内核源码的过程中,遇到了许多宏,这里面有许多都涉及到"#"和"##",因此,在网上搜索了一些资料,整理如下:一、一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include #inc转载 2017-03-07 11:18:51 · 338 阅读 · 0 评论 -
shared_from_this bad_weak_ptr的原因
前几天解了一个bug,表象是调用shared_from_this的时候就跑出bad_weak_ptr异常,类A明明是继承自boost::enable_shared_from_this的,一时搞不明白为什么,后来搜了下出现“bad_weak_ptr异常”可能的原因才找到问题所在:创建类A的对象的时候没有用智能指针包裹,而是直接new的裸指针。【引申】enable_from_t转载 2017-03-24 16:55:40 · 4855 阅读 · 0 评论 -
boost序列化
程序开发中,序列化是经常需要用到的。像一些相对高级语言,比如Java, C#都已经很好的支持了序列化,那么C++呢?当然一个比较好的选择就是用Boost,这个号称C++准标准库的东西。什么时候需要序列化呢?举个例子,我们定义了一个class,比如:[cpp] view plain copy class CCar { public: void Set转载 2017-04-11 14:40:55 · 803 阅读 · 0 评论 -
boost 文本和二进制序列化
文本序列化需要对二进制数据进行转换,还要加入分隔符,因此不仅效率低而且耗费更多的空间。写了一个小程序比较一下二者效率相差相差多少,发现还是蛮悬殊的。例子程序中对同一个对象序列化100万次,该对象包含几种常用的数据类型,除了比较速度,还比较二者耗费的空间大小。程序代码如下:#include #include #include #include #include转载 2017-04-11 14:47:30 · 1957 阅读 · 0 评论 -
boost 序列化 多个条数据,文件读取
转载自:http://www.cnblogs.com/cmranger/p/4772149.html序列化可以把对象转化成一个字节流存储或者传输,在需要时再回复成与原始状态一致的等价对象。C++标准没有定义这个功能。boost.serialization以库的形式提供了这个功能,非常强大,可以序列化C++中各种类型,而且简单易用。boost.serialization库必须编译后才能使转载 2017-04-11 15:30:59 · 2195 阅读 · 0 评论 -
window平台下动态库与静态库生成与使用(C++)
window平台下动态库与静态库生成与使用(C++)动态库动态库的生成vs的设置自行百度,废话不多讲,上代码:代码参考:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29121609&id=3851844//add.h#pragma once;//该宏完成在dll项目内部使用__declspec(dllexport)导出//在dl原创 2017-04-24 11:20:01 · 1984 阅读 · 0 评论 -
根据函数名载入库函数(GetProcAddress、dlsym)
根据函数名载入库函数(GetProcAddress、dlsym)不废话上代码:#ifdef WIN32#include <windows.h>typedef HINSTANCE HandleType;#define LoadLib(filename) LoadLibraryA(filename)#define UnLoadLib(handle) FreeLibrary(handle)#def原创 2017-04-24 14:53:23 · 3926 阅读 · 0 评论 -
C++ typedef typename 作用
C typedef typename 作用vectorsize_type为什么使用typename关键字总结C++ typedef typename 作用C++的一些语法让人看着费解,其中就有:typedef typename std::vector::size_type size_type;1详见《C++ Primer》(第五版)P584 有些不懂的语转载 2017-10-25 08:38:12 · 520 阅读 · 0 评论 -
C++11系列-什么是C++11
C++11系列-什么是C++112013-08-01什么是C++0x?C++0x是C++最新标准标准化过程中的曾用名,在这一系列文章中我们将介绍最新标准添加的一系列新的语言特性。在2011年9月份,C++0x正式由官方发布并命名C++11,现在很多编译器已经支持了部分C++11特性。C++11包括大量的新特性:主要特征像lambda表达式和移动语义,实用的类型推转载 2017-02-07 11:35:19 · 2530 阅读 · 0 评论 -
对libevent+多线程服务器模型的C++封装类
转载自:http://www.tuicool.com/articles/QBj2ma备注:1.static 函数使用原因是因为pthread_create中需要使用的是全局函数,声明为静态函数。bufferevent中的回调函数同理。通过传递参数在其中访问非静态成员2.下列代码中在TcpEventServer::ReadEventCb中为conn中的m_ReadBuf、m_WriteB原创 2017-01-11 17:17:25 · 1682 阅读 · 1 评论 -
epoll详解
转载自:http://blog.chinaunix.net/uid-24517549-id-4051156.html什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5转载 2017-01-05 08:30:27 · 416 阅读 · 0 评论 -
Google C++ style
转载自:http://blog.csdn.net/lsg32/article/details/7871088Google C++编程风格指南(一)背景Google的开源项目大多使用C++开发。每一个C++程序员也都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug、难于阅读和维护。本指南的目的是通过详细阐述在C++编转载 2015-11-20 09:14:20 · 2301 阅读 · 0 评论 -
C++ 返回引用小细节
#include using namespace std;int * & go(){ int *p; //在栈上创建变量p p=new int;//p存储堆上分配的空间 *p=10; int * &rp = p; return rp; //返回变量p的引用原创 2015-12-04 16:29:07 · 757 阅读 · 0 评论 -
C++中虚析构函数的作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout "Do转载 2016-07-11 10:27:01 · 310 阅读 · 0 评论 -
boost::nocopyable
boost::noncopyable比较简单, 主要用于单例的情况.通常情况下, 要写一个单例类就要在类的声明把它们的构造函数, 赋值函数, 析构函数, 复制构造函数隐藏到private或者protected之中, 每个类都这么做麻烦.有noncopyable类, 只要让单例类直接继承noncopyable. class noncopyable的基本思想是把构造函数和析构函数设置p转载 2016-07-11 10:31:34 · 1002 阅读 · 0 评论 -
暴雪公司关于字符串匹配的hash算法
转载自:http://blog.csdn.net/shanzhizi/article/details/7736526暴雪公司有个经典的字符串的hash公式 先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做? 有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为止,我想只要学过程序设计的人都转载 2016-07-14 16:32:30 · 1096 阅读 · 0 评论 -
经典字符串hash函数介绍及性能比较
转载自:http://blog.csdn.net/djinglan/article/details/8812934各种字符串Hash函数http://www.cnblogs.com/atlantis13579/archive/2010/02/06/1664792.htmlhttp://blog.csdn.net/icefireelf/article/details/5796529转载 2016-07-14 16:33:45 · 13436 阅读 · 0 评论 -
程序运行时会出现 xxxx.exe 中的 0x00fa1c29 处有未经处理的异常: 0xC00000FD: Stack overflow
很明显,该异常表示栈溢出,也就是局部变量太大了,超过了编译器的设定的值。方法一:局部变量通过动态分配,分配堆内存,即,new或者malloc来分配堆上面的内存方法二:将“项目属性、链接器、系统、堆栈保留大小”设大一点比如16000000再试试转载 2016-07-15 14:17:14 · 8770 阅读 · 0 评论 -
pthread条件变量condition(配合mutex锁使用),经典,有图
转载自:http://blog.sina.com.cn/s/blog_967817f20101bsf0.html为了便于理解,画了个图,一系列动作完成下来只需要一个mutex和一个conditional_variable。wait函数包含了很多操作,在wait之前和之后必须要手动加锁/解锁mutex,保证同一时间只有一个人对条件变量cond进行使用。先unlock或转载 2016-07-07 14:59:30 · 1569 阅读 · 0 评论 -
C++匿名命名空间
原贴 请见 http://jinnsky2006.spaces.live.com/Blog/cns!27D75A3853CE1DBA!915.entry 当定义一个命名空间时,可以忽略这个命名空间的名称: namespce { char c; int i; double d; } 编译器在内转载 2016-07-08 08:34:53 · 559 阅读 · 0 评论 -
C++中的单例模式
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做转载 2016-07-08 15:51:41 · 422 阅读 · 0 评论 -
关于select函数中timeval和fd_set重新设置的问题
转载自:http://blog.csdn.net/starflame/article/details/7860091select原型: int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 和select模型紧密结合的四个宏:FD转载 2016-08-17 08:46:27 · 1975 阅读 · 1 评论 -
ubuntu安装ffmpeg
1.安装编解码器sudo apt-get install libsdl1.2-devsudo apt-get install libsdl-image1.2-devsudo apt-get install libsdl-mixer1.2-devsudo apt-get install libsdl-ttf2.0-devsudo apt-get install gfx1.2-de原创 2016-08-20 16:12:56 · 638 阅读 · 0 评论 -
windows select pipe
转载自:http://blog.csdn.net/chief1985/article/details/5064998在进行socket编程时,经常会采用select或epoll来接受并发请求。在有些系统里面(例如嵌入式设备),是不支持epoll的,这时只能用select。Select定义如下: int select(int n, fd_set *rd_fds, fd_set *wr原创 2016-09-12 15:49:35 · 1798 阅读 · 0 评论 -
为什么C++赋值运算符重载函数不能被继承?
原文地址:blog.csdn.net/wuyuan2011woaini/article/details/9407933这个问题曾经困扰过我一阵子。请先看一下下面的源代码:[cpp] view plain copy class A1 { public: int operator=(int a) {转载 2016-11-30 09:56:43 · 694 阅读 · 0 评论 -
glog日志开源库使用小结
转载自:http://www.cppblog.com/pizzx/archive/2014/06/18/207320.htmlGLOG版本0.3.3 google开源的一个c++日志库,很小巧,使用也很方便。 1. 日志文件名格式为:basename+时间搓(年月日-HH:MM:SS.主线程ID)要为不同级别日志文件设置不同的basename,不能相同。google转载 2016-12-09 11:20:20 · 1788 阅读 · 0 评论 -
epoll详细工作原理
http://blog.csdn.net/hdutigerkin/article/details/7517390 开发高性能网络程序时,windows开发者们言必称iocp,Linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快转载 2017-01-05 08:20:38 · 406 阅读 · 0 评论 -
C++11读写锁
网络摘抄的读写锁代码,先保存一下,之后抽时间验证一下,看代码应该是没有问题的。 摘抄自:https://blog.csdn.net/mymodian9612/article/details/52794980 #ifndef __WRITE_FIRST_RW_LOCK_H #define __WRITE_FIRST_RW_LOCK_H #include &amp;lt;...转载 2018-06-01 09:29:40 · 12668 阅读 · 1 评论