
C++
heap-overflow
搬运工
展开
-
内联函数与宏定义的区别
使用宏和内联函数都可以节省在函数调用方面所带来的时间和空间开销。二者都采用了空间换时间的方式,在其调用处进行展开: 不同之处在预编译时期,宏定义在调用处执行字符串的原样替换。在编译时期,内联函数在调用处展开,同时进行参数类型检查。内联函数首先是函数,可以像调用普通函数一样调用内联函数。而宏定义往往需要添加很多括号防止歧义,编写更加复杂(边际效应)宏定义是没有类型检查的,无论对还是错都是直接替原创 2017-10-18 20:22:53 · 403 阅读 · 0 评论 -
const 参数重载与const 成员函数重载
const 参数重载《C++ primer》一书中这样描述:“可基于函数的引用形参是指向 const 对象还是指向非 const 对象,实现函数重载。将引用形参定义为 const 来重载函数是合法的,因为编译器可以根据实参是否为 const 确定调用哪一个函数。”但是这一段描述并没有给出引用、指针和值传递前加const的实质区别是什么。在用非const的指针,引用和值均可转化为const的。原创 2017-10-18 20:59:01 · 1740 阅读 · 0 评论 -
NULL ,nullptr,nullptr_t,0 区别
先看NULL的定义#ifndef __cplusplus#define NULL ((void *)0)#else /* C++ */#define NULL 0c语言中将NULL定义为空指针,而在c++中直接定义为0,这是因为C++是强类型的,void *是不能隐式转换成其他指针类型的。 既然NULL被定义成0,就存在二义性 c++ 中我们写这样一个函数 1test(classA a原创 2017-10-29 16:21:40 · 3832 阅读 · 0 评论 -
C 结构体内存对齐原则
这个地方总会忘,自己写一遍就记住了关于结构体内存对齐(在没有#pragma pack宏的情况下)数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素原创 2017-12-02 19:06:36 · 389 阅读 · 0 评论 -
线程池实现
thread.h#ifndef __THREAD_H #define __THREAD_H #include <vector> #include <string> #include <pthread.h> using namespace std; /** * 执行任务的类,设置任务数据并执行 */ class CTask转载 2017-11-28 14:23:56 · 352 阅读 · 0 评论