万千只cnm 发表于 2021-8-17 21:58:44

c++ 引用占空间吗

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

那一个引用在内存中占空间吗 还是只是一个符号,给编译器看的 编译时自动转换为绑定的对象

人造人 发表于 2021-8-17 22:15:36

在 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

人造人 发表于 2021-8-17 22:24:15

c++ 引用占空间吗
引用和指针一样,都占空间

万千只cnm 发表于 2021-8-17 22:29:42

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

那说明也是占内存的

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

人造人 发表于 2021-8-17 22:47:29

万千只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;
}

人造人 发表于 2021-8-17 22:51:43

万千只cnm 发表于 2021-8-17 22:29
那说明也是占内存的

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

嗯,好像是这个
int *const pa = &a;
我想,这个说法指的是,引用一旦绑定一个对象,就不可再绑定其他对象
就像上面这个 pa,这个 pa 是不可改变的,之后的代码不能改变 pa 的内容,就是不能让 pa 再指向其他变量

万千只cnm 发表于 2021-8-17 23:12:40

人造人 发表于 2021-8-17 22:51
嗯,好像是这个

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


嗯嗯。
页: [1]
查看完整版本: c++ 引用占空间吗