c++ - 初学者引用类型参数混淆

标签 c++

<分区>

foo(int &bar)
{
    bar = 5;
}

这个函数的调用是

int foobar = 2;

foo(foobar);

我是否认为函数参数本质上是“获取”变量的内存地址,但不必在 foo 中取消引用,并且我会更改 foobar 的原始值?在此之前,我的印象是您必须像这样传入内存地址:

foo(&foobar);

然后像这样使用 foo 中的变量:

*bar = 5;

我认为这是错误的吗?我认为,就像很多初学者一样,困惑来自于认为引用就像一个指针,因为它包含一个内存地址,但它从来都不是真正的类型,对吗?只是一个运算符(operator)。

最佳答案

引用通常是用底层指针实现的(尽管这不是标准强制要求的),但它们与指针完全不同。引用只是现有变量的新名称或别名。当你做的时候

void foo(int& bar)
{
    bar = 5;
}

int foobar = 2;
foo(foobar);

您正在调用 foo 以使用变量 foobar 进行评估,因此本质上 foo 中的 bar 变成了 foobar。通常的编译器实现是像这样实际实现这段代码:

void foo(int* bar)
{
    *bar = 5;
}

int foobar = 2;
foo(&foobar);

关于c++ - 初学者引用类型参数混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7677903/

相关文章:

c++ - 函数返回错误值

c++ - 一个大工厂类如何模块化?

c++ - 强制执行所有&&?

c++ - 为什么我得到 C2883 : function declaration conflicts with - introduced by using-delcaration when overriding only one overload from a base class?

c++ - 就生成随机数而言,种子是什么?

c++ - 在 Qt 中使用鼠标事件裁剪 QImage

c++ - 如何在OpenGL中拥有多个独立移动的对象

c++ - Boost Python 的性能

c++ - setxkbmap 从系统调用执行时返回 65280

c++ - 用 defined(X) 定义一个宏