摘要:提出问题给定一个类:struct A{ int a0; int a1; int a3;};如何取得各成员相对于类地址的偏移量?解决问题一种方法如下:#define MEMOFFSET1(Class, Member) (reinterpret_cast<char*>(&static_cast<Class*>(0)->Member) - reinterpret_cast<char*>(0))首先强制类型转换成为char*指针,保证计数是以字节为单位,然后指针做减法,得到整形,由于是用空指针做类型转换,因此后面的减数指针的值为0另一个等效的方式是:#
阅读全文
摘要:以下的内容是最新的c++0x标准当中的,其中vs2010是符合这个标准的TypeName&&表示右值引用类型: 为了判断一个表达式是左值还是右值,第一个想法是写函数来判断,函数不能模板特化,因此通过重载来确定是不错的方法: 第一个函数接受非const左值: template<class T>void GetValType(T&){ cout << "Not a Right Value, a T" ...
阅读全文
摘要:c++相对于c在强制类型转换上的区别还是很大的,除了引入了c中不可能有的dynamic_cast外还将原c中的强制类型转换:(Type_name)expr分拆变成几个不相交的强制类型转换:static_cast,const_cast,reinterpret_cast首先从由简单到复杂分别解释这三个不相交的强制类型转换在指针和引用上的表现:const_cast<T*>(expr) 或 const_cast<T&>(expr)(以后就只写指针的形式,毕竟指针和引用在编译后的代码上没有区别):如其名所示是随意改变某个表达式的const性和volatile的,其他的功能
阅读全文