《深度探索c++对象模型》中关于求解类数据成员存放顺序
《深度探索c++对象模型》中关于求解类数据成员存放顺序例子如下:
- C/C++ code
class test_class{public: int _mem2; int _mem1;};template<typename classtype, typename datatype1, typename datatype2>char* access_order(datatype1 classtype::*mem1, datatype2 classtype::*mem2){ return mem1 < mem2 ? "mem1 first" :"mem2 first";}int main(int argc, char* argv[]){ std::cout << access_order(&test_class::_mem1, &test_class::_mem2) << std::endl;}
这是书中的写法,运行提示对int test_class::*类型执行比较大小非法,求解答?
[解决办法]
从语法上来讲,这样写是错误的,
int test_class* mem1 是一个指向数据成员的指针,申明时与类相关,表示成员的偏移量,但使用时应与对象相关,表示对象成员本身
比如:
- C/C++ code
test_class a;int test_class::*mem1 = &test_class::_mem1;int test_class::*mem2 = &test_class::_mem2;a.*mem1 = 1; //相当于 a.mem1 = 1;a.*mem2 = 2; //相当于 a.mem2 = 2;
[解决办法]
楼主,你用的编译器和那书的作者一致么?你这样就是死读书,读死书了
[解决办法]
你的意思我明白,但是没必要这么麻烦啊
- C/C++ code
class test_class{public: int _mem2; int _mem1;};int main(int argc, char* argv[]){ test_class t; cout<<hex<<&t._mem1<<endl<<&t._mem2<<endl;}