<分区>
我正在学习 C++,我认为到目前为止一切都很好。我阅读了引用资料并做了一些练习(简单)。但是这段代码有一个理解问题:
const ints GetMax (const int& value1, const int& value2)
。
谁能帮我理解为什么它传递带有函数名称的引用以及它会做什么(也包括它的参数类型)?在这种情况下引用会做什么???
<分区>
我正在学习 C++,我认为到目前为止一切都很好。我阅读了引用资料并做了一些练习(简单)。但是这段代码有一个理解问题:
const ints GetMax (const int& value1, 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
预计会在函数中发生更改,并且该更改会反射(reflect)回调用者。
由于引用。以下代码显示了我最好的猜测,它将具有的实现类型:
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);
实际上会将 reference biggest
设置为引用 val1
和 val2
中的最大者。换句话说,它在功能上等同于伪代码:
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/