C++ 语言中的参考

Reference in c++ language

本文关键字:参考 语言 C++      更新时间:2023-10-16

我正在学习c ++,我认为到目前为止一切都很好。我阅读了参考资料并做了一些练习(简单(。但是这段代码存在一个理解问题:

const ints GetMax (const int& valuel, const int& value2).

谁能帮助我理解为什么它传递带有函数名称的引用以及它将做什么(也在其参数类型中(?在这种情况下,引用将做什么???

C++中的引用就是这样,它是一个引用其他变量的变量名称。

从陈述的角度考虑:

int xyzzy  = 1;
int &plugh = xyzzy;
int twisty = xyzzy;

这里xyzzy的实际"对象"是包含值1的东西。你用它的名字来称呼它xyzzy但这实际上只是一个名字。

plugh是对完全相同的基础对象的另一个引用 - 更改plugh的值也会更改xyzzy的值,因为它们都是同一事物的名称(引用(。

另一方面,twisty变量被创建为一个新对象,并简单地将xyzzy的值复制到它上面。


您经常会看到以下内容:

void fn(const string &str1) { ... }

在代码中,因为将引用传递给构造/复制相对昂贵的对象(如字符串(更有效。传递对对象的引用允许您直接访问当前存在的对象,并使其const可防止函数更改它。

使用像int这样的基本类型完成此操作是非常不寻常的,因为复制它们的成本非常小,通常与传递对它们的引用的成本大致相同。

您偶尔会看到以下内容:

void fn(int &thing) { ... }

但这通常是因为thing应该在函数中更改,并且该更改会镜像回调用方。


您的特定代码可能正在做的事情(尽管如果没有更多上下文我无法确定(不会通过返回引用来创建任何新对象。根据我的最佳猜测,以下代码显示了它将具有的实现类型:

const int& GetMax(const int& value1, const int& value2) {
if (value1 >= value2)
return value1;
return value2;
}

有了这个,代码:

int val1 = 7;
int val2 = 42;
const int &biggest = GetMax (val1, val2);

实际上将引用biggest设置为引用val1val2中最大的一个。换句话说,它在功能上等同于伪代码:

val1 = 7
val2 = 42
if (val1 > val2)
biggest = reference to val1
else
biggest = reference to val2

如果不通过引用传递 int,则无法从函数内部修改它。整数的副本将被修改。