注册 登录
编程论坛 C++教室

赋值表达式类型变化的问题

阿魔密火 发布于 2008-11-04 23:50, 704 次点击
#include<iostream>
using namespace std;
int main()
#include<iostream>
using namespace std;
{
    int a=3,length;
    double b=3;
    length=sizeof(a);
    cout<<"变化前a的存储大小是:"<<length<<endl;
   [it] b=a;[/it]
    length=sizeof(a);
    cout<<"变化后a的存储大小是:"<<length<<endl;
    system("pause");
}

vc2005调试输出结果
变化前a的存储大小是:4
变化后a的存储大小是:4
个人认为,变化后的存储大小是8.[bo]参考人邮版C++第34页“赋值表达式得类型由赋值表达式左值的类型决定,右值表达式要转换为左值表达式。”[/bo]当b=a时a的类型由int变为double,所以我认为变化后a的存储大小是8
3 回复
#2
debroa7232008-11-05 01:41
这是对赋值概念的理解错误,赋值并不能改变右值变量(单目操作符除外),只是将右值的量以左值的类型转换后,赋值给左值,所以右值并没有变化.
从汇编上看,是先把a的值传给寄存器,再从寄存器上传给b,所以寄存器在这里是一个中间量,而类型转换的是中间量而不是a .
#3
newyj2008-11-05 10:41
在把a隐式转换赋给b时 是创建一个临时变量的 这个并不影响 a的类型
#4
阿魔密火2008-11-05 16:33
受用
感谢楼上两位
1