setvbuf
摘要:【setvbuf】 函数名:setvbuf 功 能: 把缓冲区与流相关 用 法:int setvbuf(FILE *stream, char *buf, int type, unsigned size); 参数:stream :指向流的指针; buf : 期望缓冲区的地址; type : 期望缓冲区的类型: _IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数据。 _IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。 _IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有...
阅读全文
wait&waitpid状态值
摘要:[wait&waitpid状态值] 1. python 中 os.system 的返回值的format与wait的返回值status一致: On Unix, the return value is the exit status of the process encoded in the format specified forwait() os.system直到命令进程执行完毕才返回, SIGSTOP把子进程暂停, os.system也依旧阻塞 2. os.wait的返回值, 在不同的情况下有不同的含意, 需通过 头文件中的宏来操作 3. 若waitpid加入了WNOHAN...
阅读全文
template
摘要:【template】 1、当定义template的时候,并没有生成实例,当使用一个模板的时候才会生成一个实例。 2、模板的编译: 1)在实例化之前,先检查模板代码本身,查看是否有语法错误,如遗漏分号。 2)在实例化期间,检查模板代码,看是否所有的调用都有效,如类型匹配。 3、自定义类型会优先于参...
阅读全文
自定义模板类型vs模板类型自动推测
摘要:[自定义模板类型vs模板类型自动推测] GCC在编译时,先确定看是否人工定义了模板的类型,如果定义了,则看传递的参数是否能转换成定义后的类型,如果没定义,则根据参数确定定义的类型. 1. 是否人工定义了类型.有的话到第2步,否的话到第3步. 2. 参数是不否能转换成定义的类型, 是的话到第4步,否的话第5步. 3. 根据参数推測类型,转到第2步. 4. OK,编译通过. 5. FAIL.编译失败.
阅读全文
protobuffer
摘要:[protobuffer] 1、扩展名为.proto。 2、定义一个协议: 3、定义一个Service: 4、编译器为protoc,使用protoc: 5、style:所有的类型名均CamelCase,此外: 1)message中的字段小写。 2)enum中的字段大写。 3)services中的字段CamelCase。
阅读全文
多重继承&虚继承
摘要:[多重继承&虚继承] 1、对于下面左图的类层次,Bottom的内存结构如中间的图,当把Bottom*转换为Right*时,如下右图。 2、对于虚继承,类层次图如下左,内存结构图如下右. 3、普通继承,基类被放置在类内存的前端;虚继承,基类被放在类的后端,另外在类的头上放置一个vbptr,指向一个vtable,该vtable内含基类到当前点的偏移、当前点到整个对象原点的偏移、本对象的类型。 更多请参考:http://blog.csdn.net/littlehedgehog/article/details/5442430
阅读全文
__attribute__
摘要:[__attribute__] 1、__attribute__ ((format (printf, 2, 3))) format (printf, 2, 3)告诉编译器,my_format相当于printf的format,而可变参数是从my_printf的第3个参数开始,这样编译器就会在编译时用和printf一样的check法则来确认可变参数是否正确了。
阅读全文
ArraySizeHelper解析
摘要:[ArraySizeHelper解析] 以下代码用于获取一个数组的元素个数,例如 int table[100],以下宏返回100。template char (&ArraySizeHelper(const T (&array)[N]))[N]; #define arraysize(array) (sizeof(ArraySizeHelper(array)))[要点] 1、数组的引用 T (&)[N] (注意:有个括号)。比如: int a[5] = {0}; int (&ra)[5] = a; 这里ra就是一个对数组a的引用,其这个数组的大小也是5; 2、返回值
阅读全文
dup()&dup2()
摘要:[dup()&dup2()] 都是复制文件描述符指针。dup2可以指定复制到哪一个新索引。 参考:http://hi.baidu.com/flikecn/item/e82e14bef06e8a412aebe38a
阅读全文
拷贝构造函数的调用时机
摘要:[拷贝构造函数的调用时机] 1、对象以值传递的方式传入函数参数 2、对象以值传递的方式从函数返回 3、对象需要通过另外一个对象进行初始化 拷贝构造函数原型,假设类名为Foo,则copy constructor为: Foo( const Foo &obj); 限定符必须是const,且必须是引用。
阅读全文
Header File Dependencies
摘要:[Header File Dependencies] 什么时候可以用前置声明替代include? 1、当 declare/define pointer&reference 时。 2、当 declare static data member 时。 3、当 declare function 时。 So,下面这段代码会被正常编译通过:#include class Point;struct Square{ Point *pt; Point &ref; static Point point;};void xshow(Point p); void show(){ pri...
阅读全文
An Insight to References in C++
摘要:[An Insight to References in C++] 引用的本质是常指针。占用的内存和指针一样。 参考:http://www.codeproject.com/Articles/13363/An-Insight-to-References-in-C
阅读全文
C++ typeid
摘要:【C++ typeid】 RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提
阅读全文
何时必须使用member initialization list?
摘要:【何时必须使用member initialization list?】 1、初始化一个reference member时。 reference member必须在 initialization list中初始化。 2、初始化一个const member时。 const member必须在 initialization list中初始化。 3、当调用一个base class的constructor,而它拥有一组参数时。 必须在initialization list中调用父类的多参构造函数。 4、当调用一个member class的consturctor,而它拥有一组参数时。 必须在ini...
阅读全文
什么时候会生成Copy Constructor?
摘要:【什么时候会生成Copy Constructor?】 当无法应用 bitwise copy semantics时,就会生成copy constructor。以下4种情形,会生成copy constructor: 1、内含“带 copy constructor"的成员对象时。此时要在copy constructor中插入调用成员对象copy constructor的代码。 2、继承“带 copy constructor”的类时。此时要在copy constructor中插入调用成员对象copy constructor的代码。 3、声明了 virtual 函数时。此时要在copy con
阅读全文
default constructor
摘要:【何时会生成default constructor?】 1、带有"Default Constructor"的Member Class Object。 对于Class Object成员,编译器默认会调用此成员的默认构造函数。那么在哪调呢?答案是本对象的默认构造函数。所以编译器会生成Default Constructor。 2、带有"Default Constructor"的Base Class。 对于继承的情况,编译器默认会调用此类父类的默认构造函数。同上,在本对象的默认构造函数里调,所以需要生成Default Constructor。 3、带有"
阅读全文
Global Assert
摘要:【Global Assert】 通常Assert函数被用于函数内部,这些assert会在运行时起检察状态作用。但是如何把Assert运用在编译期呢?objc4项目提供了一种方法。 即通过设置数组长度为-1的方法来达到编译期Assert作用。
阅读全文
C++常见问题
摘要:【C++匿名对象】 C++也有匿名对象,只在当行代码有用,离开当行代码立马析构。 【mutable of C++】 mutalbe的中文意思是“可变的,易变的”,跟constant(即C++中的const)是反义词。 在C++中,mutable也是为了突破const的限制而设置的。被mutable修
阅读全文
Know what functions C++ silently writes and calls
摘要:【Know what functions C++ silently writes and calls】 1、如果自己没有声明,编译器就会为类生成一个copy构造函数、 一个copy assignment操作符函数和一个析构函数、default构造函数。所有这些函数是public且是inline。 2、例: 3、惟有这些函数被需要,他们才会被创建出来。 4、copy构造函数、copy assignment操作符函数只是简单地将来源对象每一个成员变量拷贝到目标对象。 5、当类中包含引用变量、常量时,编译器拒绝生成copy构造函数、copy assignment函数,如要需要,需自己手工实现。 ..
阅读全文
C的一些特性
摘要:【C的一些特性】 1、声明的优先级规则 1)声明中被括号括起来的那部分。 2)后缀操作符: a. 括号()表示这是一个函数 b. 方括号[]表示这是一个数组 3)前缀操作符:星号*表示“指向……的指针” 例: 1)定义一个函数,函数的返回值是一个函数指针,如:int (*func())(); 2)定义一个函数,函数的返回值是一个指向数组的指针,如:int (*func())[]; 3)定义一个数组,数组里的值是函数指针,如:int(*foo[])(); 4)char * const * (*next)(): next是一个指针,它指向一个函数,该函数返回另一个...
阅读全文