C++ 中的引用正是,它是一个引用其他变量的变量名。
从陈述的角度思考:
int xyzzy = 1;
int &plugh = xyzzy;
int twisty = xyzzy;
此处xyzzy 的实际“对象”是包含值1 的事物。您可以通过它的名称 xyzzy 来引用它,但这实际上只是它的一个名称。
plugh 是另一个对完全相同基础对象的引用 - 更改 plugh 的值也会更改 xyzzy 的值,因为它们都是(引用)的名称同样的事情。
另一方面,twisty 变量被创建为 new 对象,并简单地将 xyzzy 的值复制到它。
你会经常看到类似的东西:
void fn(const string &str1) { ... }
在代码中,因为将引用传递给构造/复制相对昂贵的对象(如字符串)会更有效。传递对对象的引用允许您直接访问当前存在的对象,并将其设为const 可防止函数对其进行更改。
使用int 这样的基本类型完成此操作是非常不寻常的,因为复制它们的成本非常小,通常与传递对它们的引用的成本大致相同。
您会偶尔会看到以下内容:
void fn(int &thing) { ... }
但这通常是因为 thing 预计会在函数中更改,并且该更改会镜像回调用者。
您的 特定 代码可能正在做的事情(尽管我无法确定没有更多上下文)不是创建 any 新对象,因为它返回了一个参考。在我的最佳猜测中,以下代码显示了它将具有的实现类型:
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