This question already has answers here:
What is a reference variable in C++?

(12个答案)


3年前关闭。




我正在学习c++,我认为到目前为止一切都很好。我阅读了有关引用资料,并做了一些练习(简单)。但是这段代码有一个理解上的问题:
const int& 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

关于c++ - c++语言引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45003919/

10-09 18:00
查看更多