C/C++
文章平均质量分 65
liyongOFDM
这个作者很懒,什么都没留下…
展开
-
thrift例程编译报错原因和解决方法总结
thrift里自带的turoral,使用make编译时经常会报错,总结如下:1.如果出现如下错误: error: ‘uint8_t’ does not name a type error: ‘uint32_t’ does not name a type编译时需要加上:-DHAVE_NETINET_IN_H如果是在cdt原创 2012-05-06 15:51:14 · 9528 阅读 · 1 评论 -
Effective C++读书笔记10(35~36)
条款35:考虑virtual函数以外的其他选择设计一款游戏,为不同的人物设计不同的计算健康指数的函数,那么使用virutal函数很自然:class GameCharacter{ public: virtual int healthValue() const; //...};现在来考虑virtual函数的替代方案。1.藉由Non-virtual interface手法实现Tem原创 2012-06-02 15:28:48 · 750 阅读 · 0 评论 -
C++11带来的move语义
C++ 11带来了move语义,可以有效的提高STL的效率,这篇文章写的非常好,可以参考,这里对原文进行翻译,加入我自己的理解原文:http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html先看看这个例子:#include using namespace std;原创 2012-06-15 23:53:28 · 28550 阅读 · 10 评论 -
Effective C++读书笔记11(37~40)
条款37:绝不重新定义继承而来的缺省参数值本条款成立的理由非常明确:virutal函数系动态绑定,而缺省参数值却是静态绑定。对象的静态类型,就是他在程序被声明时所采用的类型。考虑以下的class继承体系:class Shape{public: enum ShapeColor{Red, Green, Blue}; virtual void draw(ShapeColor col原创 2012-06-02 23:38:38 · 698 阅读 · 0 评论 -
Effective C++ 读书笔记12(41~42)
7 模板和泛型编程条款41:了解隐式接口和编译器多态面向对象编程世界总是以显式接口和运行期多态解决问题:class Widget{public: Widget(); virtual ~Widget(); virutal std::size_t size() const; virtual void normalize(); void swap(Widget& other)原创 2012-06-05 00:13:03 · 10279 阅读 · 0 评论 -
9 个开始使用 C++11 的理由
如果你的代码工作正常并且表现良好,你可能会想知道为什么还要使用C++ 11。当然了,使用用最新的技术感觉很好,但是事实上它是否值得呢? 在我看来,答案毫无疑问是肯定的。我在下面给出了9个理由,它们分为两类:性能优势和开发效率。获得性能优势理由1:move语义(move semantics)。简单的说,它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的s转载 2012-06-24 10:08:33 · 1264 阅读 · 0 评论 -
Effective C++ 读书笔记13(43~47)
条款43:学习处理模板化基类内的名称条款44:将与参数无关的代码抽离templates条款45:运用成员函数模板接受所有兼容类型条款46:需要类型转换时请为模板定义非成员函数条款47:请使用traits class表现类型信息STL主要由“用以表现容器、迭代器和算法”的template构成,但也覆盖若干工具性的template,例如advance,用来将某个迭代器移动某个给原创 2012-06-05 23:52:23 · 617 阅读 · 0 评论 -
C++11带来的lambda表达式
C++11带来了lambda表达式,可以简化程序的编写,使代码更加清晰。现在按照步骤来介绍lambda表达式:1.函数对象又叫仿函数,如果一个类或者结构体重载了operator()操作符,那么该类产生的对象就是一个函数对象,例如,有这样一个student结构体:struct Student { unsigned ID; string name; Student(unsig原创 2012-06-23 15:24:45 · 7555 阅读 · 0 评论 -
static lib and dynamic lib
http://www.cnblogs.com/feisky/archive/2010/03/09/1681996.html库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 静态库和动态库的区别1. 静态函数库 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个 函数库的所有数据都会被转载 2013-06-04 22:30:05 · 1987 阅读 · 0 评论 -
for_each的各种使用方法
http://www.cnblogs.com/Purple_Xiapei/category/378741.htmlAbstract之前在(原創) 如何使用for_each() algorithm? (C/C++) (STL) 曾經討論過for_each(),不過當時功力尚淺,只談到了皮毛而已,這次看了effective STL的item 41、43後,對for_each()转载 2013-06-16 10:15:33 · 899 阅读 · 0 评论 -
Effective stl
第一章 容器 条款4:调用empty而不是检查size()是否为0条款7:如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉第二章 vector和string条款13:vector和string优先于动态分配的数组条款14:使用reserve来避免不必要的重新分配条款16:了解如何把vector和strin原创 2013-06-16 08:26:09 · 868 阅读 · 0 评论 -
eclipse 提示框颜色
eclipse提示框的背景颜色使用的是系统的提示框颜色配置,在windows下为黄色,但在Ubuntu12.04(gnome)下却是黑色, 造成提示内容很难看清。在eclipse中我们是无法修改这个颜色的配置的,只能通过修改系统的颜色配置。在ubuntu11.10以前,我们是可以能过 自定义系统外观来修改这一颜色的配置的,但自ubuntu11.10以后,就没有相关的操作界面了,只能通过修改配置文件转载 2013-12-15 18:19:50 · 4800 阅读 · 0 评论 -
Effective C++ 读书笔记9(32~34)
6 继承与面向对象设计条款32:确定你的public集成塑模出is-a关系请记住:public继承意味is-a,适用于base classes深证的每一件事情也一定适用于derived classes身上,因为每一个derived class对象也都是一个base class对象条款33:避免遮掩继承而来的名称class Base{private: in原创 2012-06-02 11:56:09 · 647 阅读 · 0 评论 -
Effective C++ 读书笔记6
4 设计与声明条款18:让接口容易被正确使用,不易被误用条款19:设计class犹如设计type条款20:宁以pass-by-reference-to-const替换pass-by-valueby value方式比by reference方式成本大,因为会调用类的拷贝构造函数,销毁时会调用析构函数,如果类内还有类,对应的类的拷贝构造函数和析构函数都会被调用,原创 2012-05-25 22:53:52 · 534 阅读 · 0 评论 -
mmap测试
#include "mmap_fstream.h"#include "log.h"#include #include #include #include #include #include #include #include using namespace std;using namespace log4cplus;using namespace log4cplus::h原创 2012-05-07 23:32:30 · 744 阅读 · 0 评论 -
Effective C++ 读书笔记7
条款23:宁以non-member,non-friend替换member函数请记住:宁可拿non-member non-friend函数替换member函数,这样做可以增加封装性,包裹弹性和机能扩展性条款24:若所有参数皆需类型转换,请为此采用non-member函数请记住:如果你需要为某个函数的所有参数(包括this指针所指的那个隐喻参数)进行类型转换,那么这个函数必原创 2012-05-27 21:40:38 · 645 阅读 · 0 评论 -
Effective C++读书笔记8
条款28:避免返回handles指向对象内部成分class Point{ public: Point(int x, int y); //... void setX(int newVal); void setY(int newVal); //...};struct RectData{ Point ulhc; Point lrhc;};class Rectangle{原创 2012-05-30 23:25:41 · 931 阅读 · 0 评论 -
Effective C++读书笔记15
8 定制new和delete条款49:了解new-handler的行为当operator new无法满足某一内存分配需求时,它会抛出异常。以前她会返回一个null指针,某些旧式编译器目前也还那么做。当new抛出异常以反映一个未获满足的内存需求之前,它会先调用一个客户指定的错误处理函数:new-handler,为了指定这个用以处理内存不足的函数,客户必须调用set_new_handler,在中:na原创 2012-06-06 23:55:05 · 624 阅读 · 0 评论 -
Effective C++读书笔记2
条款4 确定对象被使用前已被初始化 读取未初始化的值会导致不明确的行为,在某些平台上,仅仅只是读取未初始化的值,就可能让你的程序终止运行。对象的初始化动作何时一定发生,何时不一定发生的规则很复杂,,最佳解决办法就是:永远在使用对象之前先将它初始化:对于内置类型,手动完成,对于非内置类型,由构造函数来完成。这个规则容易奉行,重要的是不要混淆赋值和初始化:class PhoneNu原创 2012-05-19 23:41:59 · 563 阅读 · 0 评论 -
Effective C++ 读书笔记1
条款1 视C++为一个语言联邦 今天的C++已经是个多重范型编程语言,一个支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言。为了理解C++,必须认识其主要的次语言,总共4个:1.C2.Object-Oriented C++3.Template C++4.STL条款2 尽量以const, enum, inline替换#define(即宁可以编译原创 2012-05-19 14:14:27 · 704 阅读 · 0 评论 -
Effective C++读书笔记16
条款51:编写new和delete时需固守常规(对这个条款体会不深)请记住:1.operator new应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用new-handler。它也应该有能力处理0 byte申请。类专属版本则还应该处理比正确大小更大的错误申请。2.operator delete应该在收到null指针时不做任何事。类专属版本则还应该处理比正确大原创 2012-06-07 23:32:11 · 525 阅读 · 0 评论 -
Effective C++读书笔记3
条款8: 别让异常逃离析构函数C++并不禁止析构函数吐出异常,但不鼓励这样做。但如果你的析构函数必须执行一个动作,而该动作可能会在失败时抛出异常,该怎么办?两个办法解决:一是 如果抛出异常程序就结束,通常通过调用abort函数完成:DBConn::~DBConn(){ try{ db.close(); }catch(){ std::abort();原创 2012-05-20 13:34:21 · 513 阅读 · 0 评论 -
boost::serialization
转自:http://www.cnblogs.com/edwardlost/archive/2011/03/16/1984623.htmlboost::serialization 基于 boost::archive 来完成任意复杂数据结构的序列化,boost::archive提供两个实现类来完成序列化、反序列化操作:boost::archive::text_oarchive转载 2012-06-10 18:18:57 · 4305 阅读 · 0 评论 -
Effective C++ 读书笔记4
条款12:复制对象时勿忘其每一个成分如果你声明自己的拷贝函数,意思是告诉编译器你不喜欢缺省实现中的某些行为。编译器仿佛被冒犯似得,会以一种奇怪的方式回敬:当你的实现代码几乎必然出错时却不告诉你:void logCall(const std::string& funcName);class Customer{ public: //... Customer(const Custo原创 2012-05-21 23:51:37 · 520 阅读 · 0 评论 -
Effective C++读书笔记5
条款15:在资源管理类中提供对原始资源的访问资源管理类很好,但是有许多API 直接指涉资源管理类所管理的资源,那么只能绕过资源管理对象直接访问原始资源。条款13:使用智能指针保存工厂函数如CreateInvestment的调用结果:std::tr1::shared_ptr pInv(CreateInvestment());假设你希望以某个函数处理Investment对象,像这样:i原创 2012-05-24 22:17:02 · 775 阅读 · 0 评论 -
完全二叉树学习
定义:假设高度为h,那么前h-1层都是满的,最后一层,从左向右,连续集中在最左边;k层的完全二叉树总节点个数最小为2^k-1,最大节点个数为2^(k-1)可以从数组形式存储的方面来考虑,数组形式存储的完全二叉树,如果元素下标为i,那么其左子树在2i+1,右子树在2i+2,父节点在floor((i-1)/2)如下图所示: 1 / \原创 2014-04-20 07:48:45 · 1198 阅读 · 0 评论