gpt4 book ai didi

c++ - C++ 编译器实际上如何在引用参数中传递文字常量?

转载 作者:行者123 更新时间:2023-11-27 23:53:46 25 4
gpt4 key购买 nike

据我所知(参见 this post ),C++ 引用实现是基于指针的。但是,我想知道当没有传递实际变量而是传递文字常量时该机制如何工作。让我用一个例子来说明我的意思:

#include <iostream>

void f(const int& n)
{
std::cout << n << std::endl;
}

int main()
{
f(42);
}

我传递给 f() 函数的是文字 42。调用者没有使用任何实际变量。

也许在这种情况下使用了一个“隐藏的”动态变量和关联的指针?任何人都可以确认(或者如果我错了,可以解释实际的机制)?

作为引用,如果答案取决于编译器,我们通常使用 gcc 4.4(在 CentOS 6.x 中)和 gcc 4.9(在 Debian 8 中)。

注意:我已经知道通过引用传递常量整数不是一个好主意。我的意思是,上面的 f() 函数的更好方法是使用 void f(int n) 按值传递。但是我认为这是一个很好的例子来说明我的疑问。

最佳答案

每个编译器都可以决定他们如何实现文字(以及与此相关的引用)。我不太熟悉 gcc 是如何实现的,但我可以推测一个可能的实现:

文字值存储在可执行二进制文件的只读部分中,在执行开始时加载到内存中。因为对象在内存中,所以它有一个地址。该地址可以分配给指针/引用。

I wonder how the mechanism work when no actual variable is passed

对象可以在没有变量的情况下存在。例如考虑动态分配。可以指向/引用那些对象。是否有变量对引用的工作方式影响不大。

关于c++ - C++ 编译器实际上如何在引用参数中传递文字常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44239212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com