鱼C论坛

 找回密码
 立即注册
查看: 1092|回复: 6

[已解决]c++ 引用占空间吗

[复制链接]
发表于 2021-8-17 21:58:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
定义一个引用时必须绑定对象,而不是将初始值拷贝给引用。

那一个引用在内存中占空间吗 还是只是一个符号,给编译器看的 编译时自动转换为绑定的对象
最佳答案
2021-8-17 22:24:15
c++ 引用占空间吗
引用和指针一样,都占空间
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-17 22:15:36 | 显示全部楼层
在 C++ 层才区分引用和指针,在汇编语言层看来,引用和指针没有区别,都是一个地址
也就是说在汇编语言层,引用和指针是一回事

  1. #include <iostream>

  2. int main() {
  3.     int a = 1;
  4.     int *pa = &a;
  5.     int &ra = a;
  6.     return 0;
  7. }
复制代码


  1. _main:
  2.     pushl   %ebp
  3.     movl    %esp, %ebp
  4.     andl    $-16, %esp
  5.     subl    $16, %esp
  6.     call    ___main
  7.    
  8.     ; int a = 1;
  9.     movl    $1, 4(%esp)
  10.    
  11.     ; int *pa = &a;
  12.     leal    4(%esp), %eax
  13.     movl    %eax, 12(%esp)      ; 12(%esp) 是变量 pa 的地址
  14.    
  15.     ; int &ra = a;
  16.     leal    4(%esp), %eax
  17.     movl    %eax, 8(%esp)       ; 8(%esp) 是变量 ra 的地址
  18.    
  19.     ; return 0;
  20.     movl    $0, %eax
  21.     leave
  22.     ret
复制代码


可以看到,在汇编语言层,引用和指针是完全一样的
一个 leal 和一个 movl
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-17 22:24:15 | 显示全部楼层    本楼为最佳答案   
c++ 引用占空间吗
引用和指针一样,都占空间
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-17 22:29:42 | 显示全部楼层
人造人 发表于 2021-8-17 22:15
在 C++ 层才区分引用和指针,在汇编语言层看来,引用和指针没有区别,都是一个地址
也就是说在汇编语言层 ...

那说明也是占内存的  

我看网上说引用相当于个指针常量 不知道对不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-17 22:47:29 | 显示全部楼层
万千只cnm 发表于 2021-8-17 22:29
那说明也是占内存的  

我看网上说引用相当于个指针常量 不知道对不对

指针常量,什么是 指针常量?
  1. #include <iostream>

  2. int main() {
  3.     int a = 1;
  4.     int *const pa = &a;     // 1
  5.     const int *pa0 = &a;    // 2
  6.     "12345";                // 3
  7.     return 0;
  8. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-17 22:51:43 | 显示全部楼层
万千只cnm 发表于 2021-8-17 22:29
那说明也是占内存的  

我看网上说引用相当于个指针常量 不知道对不对

嗯,好像是这个
  1. int *const pa = &a;
复制代码

我想,这个说法指的是,引用一旦绑定一个对象,就不可再绑定其他对象
就像上面这个 pa,这个 pa 是不可改变的,之后的代码不能改变 pa 的内容,就是不能让 pa 再指向其他变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-17 23:12:40 | 显示全部楼层
人造人 发表于 2021-8-17 22:51
嗯,好像是这个

我想,这个说法指的是,引用一旦绑定一个对象,就不可再绑定其他对象

嗯嗯。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 21:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表