再举个例子:
#include <iostream>
using namespace std;
int main()
{
int a = 1, b = 2;
cout<<sizeof(a = b)/sizeof(char)<<endl;
cout<<a<<endl;
system("pause");
return 0;
}
为什么a结果不是2呢?
sizeof本身是c/c++的一个关键字(和int、char一样)而不是一个函数,这注定它是在编译期所执行的,而在编译期a=b是不会被执行的
同时sizeof的作用是求某个类型所占用内存空间的字节数,也就是应该是sizeof(类型名)。你可能会说了,也可以sizeof(2)呀,也可以像上面的程序那样sizeof(a = b)呀!是的,这是可以的,这是因为在编译期,编译器计算出了sizeof后面跟的表达式的类型,然后sizeof计算出该类型所占用内存空间的字节数。
好了,回到我们的主题,sizeof(a = b)中的a = b为什么没有执行呢?这是因为赋值表达式的类型同其左值的类型,在这里也就是变量a的类型。因此编译器根本不会去执行a = b这个操作,而只是把sizeof(a = b)看成sizeof(a),在这里a又是int类型的,那么就成了sizeof(int)了。