比较成员被声明的顺序

    在《深入探索C++对象模型》中,谈到声明的顺序时候说到, 声明变量的顺序和他们实际在内存的排列顺序是可以不一致的,但是大多数编译器实现都一致, 基本上是按照其声明的顺序而排列的。

   并且给出下面这段代码 来比较任意两个成员的排列顺序。

 书中的代码 在vs系列里面 编译不过,我改了一下 ,没有问题。 下面是实例代码

#include <cstdlib>

class A
{
public:
	int a;
public:
	int b;
public:
	int c;
public:
	void set(int a, int b, int c)
	{
		this->a = a;
		this->b = b;
		this->c = c;
	}
};


template <class class_type, class data_type1, class data_type2>

char * access_order(data_type1 class_type::*mem1, data_type2 class_type::*mem2 )
{
	return *((int *)&mem1) < *((int *)&mem2) ?"member 1 first" : "member 2 first";
}

int _tmain(int argc, _TCHAR* argv[])
{
	printf("%s", access_order( &A::c, &A::b));
	
	system("pause");
	return 0;
}


这本书 大多数是从汇编的角度去分析 编译器对C++的实现。 和C++ primer 书中的说法 有些人 认为是不同的,但是实际上, 后者是从语法本身去看待问题,而 对象模型 则是从编译器实现上。 

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值