c++ 引用占空间吗
定义一个引用时必须绑定对象,而不是将初始值拷贝给引用。那一个引用在内存中占空间吗 还是只是一个符号,给编译器看的 编译时自动转换为绑定的对象 在 C++ 层才区分引用和指针,在汇编语言层看来,引用和指针没有区别,都是一个地址
也就是说在汇编语言层,引用和指针是一回事
#include <iostream>
int main() {
int a = 1;
int *pa = &a;
int &ra = a;
return 0;
}
_main:
pushl %ebp
movl %esp, %ebp
andl $-16, %esp
subl $16, %esp
call ___main
; int a = 1;
movl $1, 4(%esp)
; int *pa = &a;
leal 4(%esp), %eax
movl %eax, 12(%esp) ; 12(%esp) 是变量 pa 的地址
; int &ra = a;
leal 4(%esp), %eax
movl %eax, 8(%esp) ; 8(%esp) 是变量 ra 的地址
; return 0;
movl $0, %eax
leave
ret
可以看到,在汇编语言层,引用和指针是完全一样的
一个 leal 和一个 movl
c++ 引用占空间吗
引用和指针一样,都占空间
人造人 发表于 2021-8-17 22:15
在 C++ 层才区分引用和指针,在汇编语言层看来,引用和指针没有区别,都是一个地址
也就是说在汇编语言层 ...
那说明也是占内存的
我看网上说引用相当于个指针常量 不知道对不对 万千只cnm 发表于 2021-8-17 22:29
那说明也是占内存的
我看网上说引用相当于个指针常量 不知道对不对
指针常量,什么是 指针常量?
#include <iostream>
int main() {
int a = 1;
int *const pa = &a; // 1
const int *pa0 = &a; // 2
"12345"; // 3
return 0;
}
万千只cnm 发表于 2021-8-17 22:29
那说明也是占内存的
我看网上说引用相当于个指针常量 不知道对不对
嗯,好像是这个
int *const pa = &a;
我想,这个说法指的是,引用一旦绑定一个对象,就不可再绑定其他对象
就像上面这个 pa,这个 pa 是不可改变的,之后的代码不能改变 pa 的内容,就是不能让 pa 再指向其他变量
人造人 发表于 2021-8-17 22:51
嗯,好像是这个
我想,这个说法指的是,引用一旦绑定一个对象,就不可再绑定其他对象
嗯嗯。
页:
[1]