直接上代码
demo 代码(一)
#include <iostream>
using namespace std
;
int demo()
{
int i
= 0;
return i
;
}
int main()
{
demo() = 888;
return 0;
}
编译:
demo 代码(二)
#include <iostream>
using namespace std
;
int demo()
{
int i
= 0;
return i
;
}
int main()
{
int ret
= demo();
return 0;
}
左值和右值的概念
存储的层次结构
左值和右值的概念
按字面意思,通俗地说。以赋值符号 = 为界,= 左边的就是左值(lvalue),= 右边就是右值(rvalue)。
int a = 666;
左值 右值
int b = 888;
左值 右值
int c = a + b;
左值 右值 右值
lvalue - 代表一个在内存中占有确定位置的对象(换句话说就是有一个地址)。
rvalue - 通过排他性来定义,每个表达式不是lvalue就是rvalue。因此从上面的
lvalue的定义,rvalue是在不在内存中占有确定位置的表达式,而是存在在寄存器中。
所有的左值(无论是数组,函数或不完全类型)都可以转换成右值。
通过汇编加深理解
编译:
gcc demo.c -S
生成这个文件
cat demo.s
老师的讲解:
demo 代码(三)
#include <iostream>
using namespace std
;
int &demo()
{
static int i
= 0;
cout
<< "i=" << i
<< endl
;
return i
;
}
int main()
{
demo() = 888;
demo();
system("pause");
return 0;
}
编译:
执行:
结语:
时间: 2020-06-30