回复 5# 的帖子
兄弟你说的好像有点出入吧? 右值怎么会改变呢? 你还是把你的那本书仔细看看吧。
不知道你是否在 win32下 调试过 win32下long和int是一样的都宽度为4;这里我就用 int 和 short 说明一下:
#include "stdafx.h"
#include <iostream.h>
#include<limits.h>
#include<math.h>
int main(int argc, char* argv[])
{
cout<<"IntSize="<<sizeof(int)<<"
IntMax="<<INT_MAX<<"
IntMin="<<INT_MIN<<endl;
cout<<"LongSize="<<sizeof(long)<<"
LongMax="<<LONG_MAX<<"
LongMIn="<<LONG_MIN<<endl;
cout<<"shortSize="<<sizeof(short)<<"
shortMax="<<SHRT_MAX<<"
ShortMIn="<<SHRT_MIN<<endl;
int a=131072;// 2的17次方为131072
cout<<"a的地址:"<<&a<<"
a的空间大小"<<sizeof(a)<<endl;
short b=(short)a;
cout<<"b="<<b<<endl;//若b为0的话就代表着结尾的低位取8位,b=1的话就表示高位取
cout<<"a的地址:"<<&a<<"
a的空间大小"<<sizeof(a)<<endl;
return 0;
}
显示结果:
IntSize=4
IntMax=2147483647
IntMin=-2147483648
LongSize=4
LongMax=2147483647
LongMIn=-2147483648
shortSize=2
shortMax=32767
ShortMIn=-32768
a的地址:0x0012FF7C
a的空间大小4
b=0
a的地址:0x0012FF7C
a的空间大小4
Press any key to continue
从上例可以看出 左值和右值是没有必然联系的,只不过是把右边的值 经过类型转化后付给左边,等式右边是根本不会改变的。要说类型转化就不应该使用 这么简单的例子说明,我这里写一个程序 可以给大家参考参考一下 在c++中很有代表性:
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream.h>
class A{
private:
int a;
public:
A(int x):a(x){}
void show(){
cout<<"A::a="<<a<<endl;
}
};
class B{
private:
int b;
public:
B(int y):b(y){}
void show(){
cout<<"B::b="<<b<<endl;
}
};
class C:public A,public B{
private:
int c;
public:
C(int x,int y,int z):A(x),B(y),c(z){}
void show(){
A::show();
B::show();
cout<<"C::c="<<c<<endl;
}
};
int main(int argc, char* argv[])
{
C c(1,2,3);
cout<<" ======c初始化后========"<<endl;
c.show();
A a=c;
cout<<"-----c进行类型转化后付给a---"<<endl;
a.show();
B b=c;
cout<<"-----c进行类型转化后付给b---"<<endl;
b.show();
cout<<"我们来看看a,b,c三个类的地址:"<<endl;
cout<<"a:"<<&a<<endl;
cout<<"b:"<<&b<<endl;
cout<<"c:"<<&c<<endl;//地址不一样说明什么?自己想想
return 0;
}
程序的结果:
======c初始化后========
A::a=1
B::b=2
C::c=3
-----c进行类型转化后付给a---
A::a=1
-----c进行类型转化后付给b---
B::b=2
我们来看看a,b,c三个类的地址:
a:0x0012FF70
b:0x0012FF6C
c:0x0012FF74
Press any key to continue
希望这些可以给大家一点启示,