【问题标题】:Reference in c++ language [duplicate]c ++语言中的参考[重复]
【发布时间】:2017-07-10 04:44:43
【问题描述】:

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

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

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

【问题讨论】:

标签: c++ linux ubuntu


【解决方案1】:

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 设置为引用 val1val2 中的最大值。换句话说,它在功能上等同于伪代码:

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

【讨论】:

  • thnx 我明白了,但是如果我们用 int& 之类的类型名称编写它,引用会做什么?
  • 但是在参数中传递const int&有什么好处吗?因为它是int,所以它在数据处理方面没有任何优势,因为它是const,我们无法更改它。那么传递const int& 而不是普通的int 有什么意义呢?
  • @taskinoor:我已经根据问题中的新信息更新了我的答案。因为你想返回一个变量的reference,你需要使用一个生命周期超出函数的变量。换句话说,按值传递参数和局部变量不在等式中。
  • @paxdiablo 你能推荐更好的学习c++的方法吗?(或者也许有一些容易理解的书)
  • 抱歉,@FirdavsbekNarzullaev,我怀疑使用 C++ 已有 25 年之久的人可能是最没有资格就如何学习它提出建议的人 :-)
【解决方案2】:

如果您不通过引用传递 int,则无法从函数内部对其进行修改。将改为修改 int 的副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多