c++ - c++语言引用

标签 c++ linux ubuntu

<分区>

我正在学习 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 设置为引用 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/

相关文章:

python-3.x - 如何在使用 Twilio 的 python 中继续运行客户端程序

python - wxPython 在 ubuntu 上运行不正常

c++ - CRLF 行尾和 ostringstream

.net - .NET下的C/C++如何在运行时确定方法参数类型?

使用 STL 容器和 typedef 的 C++ 模板类

linux - 如何查找和删除字符串中的多个子字符串

c - 如何使用 clock_gettime 制作精确的倒数计时器?

linux - 我可以为 DirectFB 构建 FireBreath NPAPI 插件吗?

ubuntu - 我可以在本地服务器上使用 signalR,但我不能在真实服务器上使用它,我收到代理错误

c++是否明确定义了将静态数组转换为指针然后递增该指针以访问元素?