随笔分类 - [30]C++
-
Effective C++构造函数析构函数Assignment运算符
摘要:在看《Effective C++》这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上。所以决定把这本书的内容加上自己的理解写成5篇博客,我觉得不管你是否理解这些条款,都值得你先记下来。下面的索引对应的是书中的章节。11:如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符12:在constructor中尽量initialization动作取代assignment工作13:initialization list中的members初始化次序应该和其在class内的声明次序相同14:总上base cla 阅读全文
-
从《C++ Primer 第四版》入手学习 C++
摘要:从《C++ Primer 第四版》入手学习 C++《C++ Primer 第4版 评注版》即将出版,这是序言。PDF 版见:https://github.com/downloads/chenshuo/documents/LearnCpp.pdf从《C++ Primer 第四版》入手学习 C++为什么要学习C++?2009年本书作者Stan Lippman先生来华参加上海祝成科技举办的C++技术大会,他表示人们现在还用C++的惟一理由是其性能。相比之下,Java/C#/Python等语言更加易学易用并且开发工具丰富,它们的开发效率都高于C++。但C++目前仍然是运行最快的语言[1],如果你的应用 阅读全文
-
发布一个开源的c++网络事件库
摘要:Chaos是一个基于Linux平台, reactor模式的网络事件库,目前仅支持TCP传输协议,仅在x86_64下编译,并遵循3-clause BSD开源协议.在使用上,可以说它很像boost asio,可能是由于我对boost asio的接口设计很有爱吧,而且对于boost asio在异步编程方面的思想,我个人也比较认同,但至今我也没有仔细阅读过boost asio的源码,一是boost的模板化编程在可读性上让我比较折磨,其二则是不想在对设计先入为主的情况下去开发chaos,很多事情只有我们自己亲自去思考,才能有所收获. 进入主题,关于chaos库源码和所有测试用例和应用服务,都在http. 阅读全文
-
没有文件扩展".js"的脚本引擎 解决办法
摘要:没有文件扩展".js"的脚本引擎 解决办法在命令行运行JScript脚本时,遇到如下的错误提示:“输入错误: 没有文件扩展“.js”的脚本引擎。”这样的错误,原因是因为JS扩展名的文件被其他软件关联了,需要取消关联。如系统中安装了ULTRAEDIT或者E钻加密软件等,就需要去掉关联;或者如下解决方法:在运行中输入“regedit”进入注册表,只需要把[HKEY_CLASSES_ROOT\.js] 项下的那个默认值改成 "JSFile" 就可以正常运行JS 文件了。分类:Project manage,System ToolsC++经验谈(摘抄)一、用C++ 阅读全文
-
C++ Lambda
摘要:遇见C++ LambdaWritten by Allen LeeIf you die when there's no one watching, and your ratings drop and you're forgotten.– Marilyn Manson, Lamb Of God生成随机数字 假设我们有一个vector<int>容器,想用100以内的随机数初始化它,其中一个办法是通过generate函数生成,如代码1所示。generate函数接受三个参数,前两个参数指定容器的起止位置,后一个参数指定生成逻辑,这个逻辑正是通过Lambda来表达的。代码 1 阅读全文
-
folly学习心得
摘要:学习代码库的一般步骤1)编译安装;2)学习doc/manual文档;3)学习test用例;4)测试并使用。folly库的学习心得独立有用的小技巧Eventfd.h----针对eventfd系统调用的包装器。Foreach.h----伪语句(作为宏语句来实现),用于迭代。IntrusiveList.h---方便类型定义,用于使用boost::intrusive_list(不知道干什么的)。Likely.h----针对__builtin_expect的包装器。分支预测编译加速。Malloc.h----内存分配助手,尤其是使用jemalloc时。MapUtil.h----用于查找联合容器的小工具,找 阅读全文
-
facebook folly编译脚本
摘要:folly in githubhttps://github.com/facebook/follyautoconf,autmake使用详解http://www.laruence.com/2009/11/18/1154.htmlfolly库中的README有关于库依赖第三方库的详细说明,其中double-conversion需要特殊编译。 Ubuntu 12.04 64-bit - g++ - automake - autoconf - autoconf-archive - libtool - libboost1.46-all-dev - libgoog... 阅读全文
-
【Windows】线程漫谈——线程同步之关键段
摘要:本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。关键段关键段(Critical Section)是一小段代码,它在执行之前需要独占对一些共享资源的访问权。这种方式可以让多行代码以“原子方式”对资源进行操控。这里的原子方式,指的是代码知道除了当前线程之外,没有其他任何线程会同时访问该资源。当然,系统仍然可以暂停当前线程去调度其他线程。但是,在当前线程离开关键段之前,系统是不会去调度任何想要访问同一资源的其他线程的。下面的代码展示了Critical Section的使用方法:?12345678910111213141516171819const i 阅读全文
-
动态,静态库的发布和使用
摘要:一个语言的活力,在于库的丰富与否!动态,静态库的发布和使用。这里给大家一个简单解释!要真正理解,得动手试试啊。动态指的是随时用随时调用,并没有加载到可执行程序里面,而是获得一个函数或者变量的地址。用的时候去沿着地址取。静态指的是不管你用不用都放那里。用你就用。不用也放那里。1.动态链接库:动态顾名思义,是在程序运行时候用到哪里调入那里的方式。对于动态库的应用(在windows上)主要两种方式。 1.1自动导入。 首先,我们来发布一个dll库,过程:VS 新建项目----->win32控制台------->dll(过程简单就不截图了) 这时候,你需要的是如何发布dll以及如何这里有一 阅读全文
-
【Windows】线程漫谈——线程栈
摘要:本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。进程与线程理解线程是至关重要的,每个进程至少有一个线程,进程是线程的容器,线程才是真正的执行体,线程必然在某个进程的上下文中运行。进程拥有惰性,如果进程中所有的线程都已结束,那么进程也就没有存在的必要了。一个进程由如下两部分组成:1、一个进程地址空间;2、一个进程内核对象一个线程由如下两部分组成:1、一个线程栈;2、一个线程内核对象线程的开销要比进程少很多,所以在解决编程问题的时候尽量考虑在当前进程中创建线程而不是创建新的进程。然而,线程的切换需要消耗一定数量的CPU资源,因此,也不是说可以毫无顾 阅读全文
-
你真的懂C++吗
摘要:一年前写的东西,整理了一下,贴出来。 大学时期我眼中的C++和C语言一样一样的,因为课时不够老师讲C++的时候只讲了前半部分语法(相当于C语言学了两遍),关于面向对象部分的东西还没讲到课程就结束了,秉着混日子的学习态度后边的也没看。这也造成了我为期四五年的天真无知的认为我懂C++,直到近期翻看《STL源码剖析》《Boost文档库》才老脸一红有了自知之明。现在想来即使老师把后半部分面向对象讲了也不算真正的懂C++(那破教材应该扔了,而且大学C++的课程时长应该翻三倍),C++的水太深了。 站在程序员的角度来说,一门成熟的编程语言应该具备以下一些东西:简洁易懂标准统一的语法语义,功能齐全的类库,. 阅读全文
-
学习ACE
摘要:作 者:david++发布时间:2012/06/08 09:02文章地址:http://game-lab.org/?p=320近两个月都在学习ACE,一个超级强大,也超级复杂的网络框架库。对ACE的大名早有听说,同时也听说过它的复杂性,所以一直不敢去碰它。ACE对程序员的要求是比较高的了,需要对C++、设计模式、POSA、网络、并发等有一定的了解后,才能去碰它。不然真的是一头扎进茫茫大海,越看越复杂,直到消磨完所有对ACE的热情。经过两个月的摸索,查找各种资料,最后也总算是知道了该如何去学习这个Ace(王牌)基本的ACE,以后有所心得,也会即时在博客上予以分享。下面推荐几本学习ACE必备的工. 阅读全文
-
WebM Splitter Filter
摘要:最近在看Xiph.org的源码,学习如何解析webm视频格式以及开发对应的directshow filter。发现一个问题,在源码包里无论是自己编译,还是用Xiph编译好的WebM Splitter Filter都无法正常工作,VS2010定位到音频部分,发现parser在解析vorbis音频时候,并没有正确读出音频的channel条数。 1 BYTE AudioStream::GetChannels() const 2 { 3 const AudioTrack* const pTrack = static_cast<const AudioTrack*>(m_pTrack); 4 阅读全文
-
C++异步编程 for VS2011
摘要:任务组:在之前我们介绍的异步操作都是基于Task<>的,这个是被封装好的类,可以作为传入,或者传出参数。下面我们要介绍的任务组的概念,他是比Task<>更轻量级的异步调用方式。在PPL中Concurrency::task_group和Concurrency::structured_task_group,这两个类都是异步操作的任务组,Concurrency::task_handle类是任务组的基本单位。我们先用Concurrency::structured_task_group举例,我们通过structured_task_group::run 去添加任务,这个任务就是Co 阅读全文
-
STL源码学习----内存管理
摘要:出差的这段时间想再次好好地学习了一下STL。接下来的几篇博文就自己阅读STL源码的一些个人理解分享,希望跟同行多多交流,有欠佳的地方还望各位多多指教。 STL中诸多容器和算法都要涉及到向系统申请和释放内存,所以先读读C++的内存管理----C++称其为allocator1, default allocator SGI STL 的头文件defalloc.h中有一个符合标准的名为allocator的内存分配器,它只是简单地将::operator new 和::operator delete做了一层薄薄的封装。在SGI STL的容器和算法部分从来没有用到这个内存分配器。在此略过。2, STL 的内. 阅读全文
-
开源C++项目Google JavaScript引擎V8挑战实录,带你进入V8之旅
摘要:写在开始按照今年的计划,需要研究一个有使用价值的linux下的C++开源项目,无意中发现了V8,觉得还不错,于是记录下来,希望对大家有所帮助。V8是一个由丹麦Google开发的开源JavaScript引擎,用于Google Chrome中,Chrome是现有的浏览器中速度相对比较快的一个,这完全得益于V8的效率,另外,作为一个独立的项目,V8也可以嵌入到我们自己开发的项目中运行,查了一下才知道,前一这被大家热炒的Node.js也是基于V8的,可见V8值得大家稍微研究一番。作为一个开源JavaScript引擎,V8是以源代码的形式开源,而我们使用的时候是以库的形式进行使用,这就涉及到源代码的编译 阅读全文
-
C++ Primer
摘要:积累吧:http://www.jileiba.com/C++ Primer中文版(第4版)http://www.verycd.com/topics/147662/中文名:C++ Primer中文版(第4版)英文名:C++ Primer (4th Edition)版本:PDF发行日期:2006年03月01日地区:大陆对白语言:普通话简介:【原书名】 C++ Primer (4th Edition)【原出版社】 Addison Wesley/Pearson【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo【译者】 李师贤 蒋爱军 梅晓 阅读全文
-
《如何学习C++语言》和《如何学习C语言》
摘要:http://sunxiunan.com/?p=1661云风最近写了一篇博客《C语言的前世今生》。作为长期使用C语言开发网络游戏服务器的程序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C语言在业界使用的现状没有怎么描写,有些意犹未尽。在这里想比较系统的谈谈个人对C语言学习方式方法的理解。分别按照书籍、实验环境搭建、网络资源来分别介绍,希望能写的比较完整全面一些,给想学习C语言的朋友一个有价值的参考。为什么要学习C语言?为什么要学习、使用C语言?为什么要学习一个可能比自己都岁数大的编程语言?我在前面如何学习编程语言的博客文章http://sunxiunan.com/?p=1597里 阅读全文
-
C++多线程编程
摘要:C++的多线程不同于C语言的多线程,对于我这个从C转向C++的来说更是觉得很难理解;来新公司的这段时间也是一直在思考这方面的事情,近期一直在检查程序中死锁的问题;就总结以下最近对于C++多线程编程的心得吧。 C++的多线程主要体现在两方面,一方面是对于全局数据的线程同步。我们看下面的实例 首先我们封装一个Thread类Thread.h文件View CodeThread.cpp文件View Code 然后我们新建MyThread类,继承自Thread类,以实现不同的算法。MyThread.hView CodeMyThread.cppView Codemain.cppView CodeMak... 阅读全文
-
2012年C++学习计划
摘要:新的一年已经过去许久,由于现有项目已经进入验收阶段,也使得我有时间可以整理下自己的思路,为这已到来许久的2012年制定新的学习计划,不至于在世界末日之前连boost库都不明白。工作了三年,可以说浪费了不少时间,现在开始真正知道了昔时,虽有些为时已晚,但总比永远不明白的要来的好可能是由于自己这3年多来一直接触的是C++有关,发现自己还是对底层的很多东西感兴趣,像什么操作系统,对内存的操作,很喜欢研究库的源码,会钻进去研究原理,会为好的源码库叫好,所以也基本确定了自己在未来的方向,也就是向底层方向发展,专注于底层的东西,虽然说现在Java、C#大行其道,但我想不管哪个领域,只要你足够有实力,总能分 阅读全文