C++ 补充 & C++ 11 - 左值和右值的概念

    技术2022-07-10  123

    直接上代码

    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(); // demo() = 888; 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() { //int ret = demo(); demo() = 888; /* demo() 返回的i的引用, 别名 */ demo(); system("pause"); return 0; }

    编译:

    执行:

    结语:

    时间: 2020-06-30

    Processed: 0.012, SQL: 9