zoukankan      html  css  js  c++  java
  • 左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据

    1
    左值指的是可以取地址的变量,记住,左值与右值的根本区别在于能否获取内存地址,而能否赋值不是区分的依据。通常临时量均为右值。
    那么显然你所说的字面常量 2 是右值了。

    2
    临时变量(右值)生命周期
    a) 临时对象应该在完整表达式结束时销毁
    b) 常量左值引用会延长临时变量的生命

    3
    "a是不是比值2多了用了保存地址的内存? 占用内存上,a > 2,,对么?"
    这是不对的。
    a) 如果 a 是一个全局变量,因为带初始值,编译后会存放在目标文件的.data段中,在链接时所有目标文件的.data段会进行合并,此时决定全局变量的最终地址,当Loader载入你的程序时,a 变量对应的内存单元里就会被填充入2了。而你的2,有些编译器是用long类型来存的。
    b) 如果 a 是局部变量,那么 2 可以直接写在指令里的,存放在.text段里,运行时由该指令把 2 填进局部变量 a 对应的地址里。(实际上是小的数存在指令里,大的数存在.data段中)
    总而言之,程序中的字面常量的处理方法是与编译器、链接器的实现相关的。


    作者:Acjx
    链接:https://www.zhihu.com/question/26203703/answer/32841444
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    51Nod 1085 背包问题 (01背包)
    Hdu2602 Bone Collector (01背包)
    Hdu1241 Oil Deposits (DFS)
    问题 1462: [蓝桥杯][基础练习VIP]Huffuman树
    结果填空:最强团队
    算法提高 排列数 (全排列)
    和 (DFS)
    洛谷P1605 迷宫 (DFS)
    Poj1979 Red and Black (DFS)
    Poj2386 Lake Counting (DFS)
  • 原文地址:https://www.cnblogs.com/findumars/p/11055515.html
Copyright © 2011-2022 走看看