C++研究
ChaoticLife
这个作者很懒,什么都没留下…
展开
-
Effective C++学习笔记(8)
条款21: 尽可能使用const char *p = "hello"; // 非const指针, 非const数据const char *p = "hello"; // 非const指针, const数据char * const p = "hello"; // const指针, 非const数据const char * const p = "hello"; // const指针, const原创 2009-02-22 20:34:00 · 274 阅读 · 0 评论 -
More Effective C++读书笔记(4)
M4:避免无用的缺省构造函数构造函数能初始化对象, 而缺省构造函数则可以不利用任何在建立对象时的外部数据就能初始化对象. 例如一些行为特性与数字相仿的对象被初始化为空值或不确定的值也是合理的,还有比如链表、哈希表、图等等数据结构也可以被初始化为空容器.无需任何数据即可建立对象的类可以包含缺省构造函数而需要数据来建立对象的类则不能包含缺省构造函数// 公司的设备类设备必需包含一个IDclass Eq原创 2009-02-24 21:34:00 · 464 阅读 · 0 评论 -
Effective C++学习笔记(4)
第三章构造函数,析构函数和赋值操作符条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符 (只要类里有指针时,就要写自己版本的拷贝构造函数和赋值操作符函数) 可以只声明这些函数(声明为private成员)而不去定义(实现)它们。这就防止了会有人去调用它们,也防止了编译器去生成它们条款12: 尽量使用初始化(列表)而不要在构造函数里赋值 因为const成员原创 2009-02-22 20:25:00 · 294 阅读 · 0 评论 -
Effective C++学习笔记(5)
条款16: 在operator=中对所有数据成员赋值template // 名字和指针相关联的类的模板class namedptr { // (源自条款12) public: namedptr(const string& initname, t *initptr); namedptr& operator=(const namedptr& rhs);private: s原创 2009-02-22 20:29:00 · 309 阅读 · 0 评论 -
Effective C++学习笔记(9)
条款22:尽量用"传引用"而不用"传值"class person{public: person(); ~person(); // ...private: string name, address; };class student: public person{public: student(); ~student(); pri原创 2009-02-22 20:35:00 · 300 阅读 · 0 评论 -
Effective C++学习笔记(18)
第七章杂项 条款45: 弄清C++在幕后为你所写、所调用的函数 ---- 一个类当C++编译器通过它的时候。如果你没有声明下列函数,体贴的编译器会声明它自己的版本。这些函数是:一个拷贝构造函数,一个赋值运算符,一个析构函数,一对取址运算符。另外,如果你没有声明任何构造函数,它也将为你声明一个缺省构造函数。class Empty{}; | 等价于 Vclass Emp原创 2009-02-22 20:53:00 · 402 阅读 · 0 评论 -
boost 库linux编译安装(修正 版)
boost 库linux编译安装(修正 版) 相对于Windows来,Linux下的boost编译简单至极。没有那么多的可选编译器,没有那长的编译时间,没有那么多的硬盘使用量,统一的inlude和lib目录,你熟悉命令行,不使用IDE,不需要我那么罗嗦的介绍怎么配置EditPlus。转载 2010-07-26 23:59:00 · 804 阅读 · 0 评论 -
收集C++开发经验
<br />1. 常量字符串放哪里<br />char* msg = "hello"; // 字符串常量 应该用const 来修饰<br />// msg 是个指针,c/c++语言不保证为它翻盘一块内存,其实我们没有现实的为它分配一块内存, <br />它指向哪里? 指向"hello" 当在代码里写了"hello" <br />实际上c++语言分配了一块内存存放这个字符串,<br />当写了char* msg = "hello"的时候,就把hello的内存地址赋给了msg<br />原创 2010-12-12 10:25:00 · 404 阅读 · 0 评论 -
TCP/UDP流程比较
TCP 流程UDP流程TCP和UDP的程序差异:socket()参数不同UDP Server不需要使用listen及acceptUDP收发数据用sendto/recvfrom TCP使用send/recvTCP:address message在connect/accept时决定 UDP:在每次的sendto/recvfrom函数中取得address messageUDP:shutdown无效SOCK_STREAM:使用TCP/IP協定。SOCK_DGRAM:使用UDP協定。SOCK_R转载 2010-12-12 11:56:00 · 1857 阅读 · 1 评论 -
解决error LNK2019一种错误
<br />1 去掉cpp 文件的inline 2 模板函数移入头文件中原创 2011-03-02 17:22:00 · 503 阅读 · 0 评论 -
protobuf的编码方式
本文介绍protobuf的编码方式。源地址一个简单的消息message Test1 { required int32 a = 1;}我们创建一个Test1消息,给a赋值150,序列化之后存储,我们得到如下的3个byte数据(16进制表示):08 96 01非常的简洁,那么这是如何得到的呢?下面我们开始分析Varints编码首先介绍Var转载 2012-02-02 16:05:20 · 525 阅读 · 0 评论 -
Let's BOOST THE WORLD .
1. 序言现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉. Let's BOOST THE WORLD .2. 编译:VC2005注意在 属性->C/C++->预处理器->预处理定义 中加入_CRT_SECURE_NO_DEPRECATE;来屏蔽不必要的警告3. Asio 网络库Boost.Asio是利用当代C++转载 2012-02-15 12:01:32 · 143 阅读 · 0 评论 -
C++ undefined reference to 错误
undefined reference to xxx 一般都是没有链接对应的lib文件造成的例如t.cc:(.text+0x13): undefined reference to `std::cout'没有链接标准库文件编译时加参数 -lstdc++ 即可原创 2012-02-28 14:25:46 · 2561 阅读 · 0 评论 -
PHP扩展二进制数据返回
使用C或者C++编写PHP扩展时需要返回二进制的字符串是要使用RETURN_STRINGL宏进行返回用法如下:RETURN_STRINGL(string, length, duplicate)返回一个定长的字符串。其余跟 RETURN_STRING 相同。这个宏速度更快而且是二进制安全的。原创 2012-02-28 15:52:39 · 1265 阅读 · 0 评论 -
boost::bind介绍
boost::bind介绍bind的中文翻译是"绑定",它的作用就是把参数与象函数一样的"东西"进行"绑定",然后象函数一样运行.那象函数一样的"东西"到底是什么东西呢?象函数一样的"东西"还挺多的.int f1();free function,这当然是一种.int C::method();某个class的method,当然也是一种.typedef int (*pf转载 2012-11-02 16:25:12 · 122 阅读 · 0 评论 -
More Effective C++学习笔记(1)
M1:指针与引用的区别1. 首先,在任何情况下都不能使用指向空值的引用。char *pc = 0; // 设置指针为空值char& rc = *pc; // 让引用指向空值 - 错误string& rs; // 错误,引用必须被初始化string s("xyzzy");string& rs = s; // 正确,rs 指向sstring *ps; // 未初始化的指针, 合法但危险2. 使用引用的原创 2009-02-23 12:40:00 · 406 阅读 · 0 评论 -
Effective C++学习笔记(16)
条款43: 明智地使用多继承 class Lottery { public: virtual int draw(); // ...};class GraphicalObject { public: virtual int draw(); // ...};class LotterySimulation: public Lottery, public Graphica原创 2009-02-22 20:50:00 · 330 阅读 · 0 评论 -
Effective C++学习笔记(12)
条款27: 如果不想使用隐式生成的函数就要显式地禁止它 template class Array { private: // 只声明不定义这个函数! 可以防止Array对象赋值 Array& operator=(const Array& rhs); // ...};1. 不只适用于赋值运算符,适用于条款45所介绍的每一个编译器自动生成的函数2. 赋值和拷贝构造函数具有行原创 2009-02-22 20:42:00 · 302 阅读 · 0 评论 -
Effective C++学习笔记(15)
条款40: 通过分层来体现 "有一个" 或 "用...来实现"// "分层" 也称为:构成(composition),包含(containment)或嵌入(embedding)。class Address { ... }; // 某人居住之处class PhoneNumber { ... };class Person { public: ... private: string nam原创 2009-02-22 20:48:00 · 308 阅读 · 0 评论 -
Effective C++学习笔记(17)
条款44: 说你想说的;理解你所说的 · 共同的基类意味着共同的特性。 如果类D1和类D2都把类B声明为基类,D1和D2将从B继承共同的数据成员和/或共同的成员函数。见条款43。 · 公有继承意味着 "是一个"。 如果类D公有继承于类B,类型D的每一个对象也是一个类型B的对象,但反过来不成立。见条款35。· 私有继承意味着 "用...来实现"。 如果类D私有继承于类B原创 2009-02-22 20:52:00 · 325 阅读 · 0 评论 -
More Effective C++学习笔记(2)
M2:尽量使用C++风格的类型转换类型转换写法: static_cast(expression) int firstNumber, secondNumber;double result = ((double)firstNumber)/secondNumber; // C的类型转换写法double result = static_cast(firstNumber)/secondNumber;1. s原创 2009-02-23 12:42:00 · 576 阅读 · 0 评论 -
More Effective C++读书笔记(3)
M3:不要对数组使用多态语言规范中说通过一个基类指针来删除一个含有派生类对象的数组,结果将是不确定的BalancedBST:class BST { ... };class BalancedBST: public BST { ... }; void printBSTArray ( ostream& s, const BST array[],原创 2009-02-24 21:30:00 · 411 阅读 · 0 评论 -
Effective C++学习笔记(1)
第一章 从C转向C++条款1: 尽量用const和 inline 而不用#define“尽量用编译器而不用预处理”条款2:尽量用而不用类型安全和可扩展性条款3:尽量用new和delete而不用malloc和freemalloc和free不知道构造函数和析构函数不可混用条款4:尽量使用c++风格的注释第二章内存管理条款5:对应的new和delete要采用相同的形式string *stringpt原创 2009-02-22 20:08:00 · 400 阅读 · 0 评论 -
Effective C++学习笔记(2)
条款8: 写operator new和operator delete时要遵循常规 非类成员形式的operator new的伪代码看起来会象下面这样: void * operator new(size_t size) // operator new还可能有其它参数{ if (size == 0) { // 处理0字节请求时, size = 1; // 把它当作1个字节请原创 2009-02-22 20:21:00 · 379 阅读 · 0 评论 -
Effective C++学习笔记(3)
条款9: 避免隐藏标准形式的new 条款10: 如果写了operator new就要同时写operator delete缺省的operator new和operator delete具有非常好的通用性,它的这种灵活性也使得在某些特定的场合下,可以进一步改善它的性能。尤其在那些需要动态分配大量的但很小的对象的应用程序里缺省版本的operator new是一种通用型的内存分配器,在它所返回的内存原创 2009-02-22 20:24:00 · 351 阅读 · 0 评论 -
Effective C++学习笔记(6)
条款17: 在operator=中检查给自己赋值的情况 1. 用值相等来确定对象身份和两个对象是否占用相同的内存没有关系, 有关系的只是它们所表示的值c& c::operator=(const c& rhs) { // 检查对自己赋值的情况 if (*this == rhs) // 假设operator=存在 return *this;...}注意这个函数比较原创 2009-02-22 20:30:00 · 281 阅读 · 0 评论 -
Effective C++学习笔记(7)
第四章类和函数:设计与声明条款18: 争取使类的接口完整并且最小 条款19: 分清成员函数,非成员函数和友元函数 class rational { public: rational(int numerator = 0, int denominator = 1); int numerator() const; int denominator() const;private:原创 2009-02-22 20:33:00 · 367 阅读 · 0 评论 -
Effective C++学习笔记(10)
条款24: 在函数重载和设定参数缺省值间慎重选择如果可以选择一个合适的缺省值并且只是用到一种算法,就使用缺省参数(参见条款38)。否则,就使用函数重载// 一个表示自然数的类class natural {public: natural(int initvalue); natural(const natural& rhs);private: unsigned int value;原创 2009-02-22 20:38:00 · 352 阅读 · 0 评论 -
Effective C++学习笔记(11)
条款26: 当心潜在的二义性 class B; // 对类B提前声明class A {public: A(const B&); // 可以从B构造而来的类A};class B {public: operator A() const; // 可以从A转换而来的类B};void f(const A&);B b;f(b); // 错误!——二义一看到对f的调用,编译器就知道它必须产生一原创 2009-02-22 20:41:00 · 348 阅读 · 0 评论 -
Effective C++学习笔记(13)
第五章类和函数: 实现条款29: 避免返回内部数据的句柄class string { public: string(const char *value); // 具体实现参见条款11 ~string(); // 构造函数的注解参见条款m5 operator char *() const; // 转换string -> char*; // 参见条款m5 ...priva原创 2009-02-22 20:43:00 · 443 阅读 · 0 评论 -
Effective C++学习笔记(14)
第六章继承和面向对象设计虚函数的含义是 "接口必须被继承",非虚函数的含义是 "接口和实现都要被继承"条款35: 使公有继承体现 "是一个" 的含义 条款36: 区分接口继承和实现继承 · 定义纯虚函数的目的在于,使派生类仅仅只是继承函数的接口 · 声明简单虚函数的目的在于,使派生类继承函数的接口和缺省实现 · 声明非虚函数的目的在于,使派生类继承函数的接口和强制性原创 2009-02-22 20:47:00 · 397 阅读 · 0 评论 -
readdir 报错Value too large for defined data
linux 下64位系统下 执行32位的程序 readdir 报Value too large for defined data错误原因应该是文件节点inode64读取的问题编译时加入-D_FILE_OFFSET_BITS=64原创 2014-01-08 12:36:20 · 549 阅读 · 0 评论