gpt4 book ai didi

c++ - 对 int 的本地引用有什么好处吗?

转载 作者:行者123 更新时间:2023-11-30 02:35:03 25 4
gpt4 key购买 nike

考虑以下两个代码示例:

void int_fun(int val) {}

void another_fun() {
vector<int> test(1, 1);
const int& int_ref = test[0];
int_fun(int_ref);
}

对比

void int_fun(int val) {}

void another_fun() {
vector<int> test(1, 1);
const int int_val = test[0];
int_fun(int_val);
}

编译器是否可以将 int_ref 实现为无操作,而在第二种情况下它必须创建 test[0] 的拷贝?或者在第二种情况下也可以优化复制,这两个示例在性能上是等效的?

示例和问题的动机是有时为了代码清晰,创建本地对象是有益的,该对象将立即传递给示例中的某个函数。

在这种情况下,对基本类型(如 int、bool 等)使用引用是否有任何好处,或者引用和值是等价的(或者值可能更好)?

最佳答案

在您提供的情况下,我看不到真正的优势。我怀疑大多数编译器在大多数情况下都会为两者生成相同的代码(至少在启用优化的情况下)。不过,我认为该引用使意图更加清晰:真正的意图是将原始对象传递给函数,而您只是出于某种原因创建并传递了一个别名给该对象。

不过,在略有不同的情况下,行为可能会有所不同。显而易见的是,如果函数收到引用:

void int_fun(int &val);

void another_fun() {
vector<int> test(1, 1);
int &int_val = test[0];
int_fun(int_val);
}

在这种情况下,int_fun 可能会修改它收到引用的值,因此如果您创建了一个引用,然后通过引用传递它,引用将被折叠,因此该函数可以修改数组中的值(但如果您创建了一个拷贝,然后通过引用传递它,则会修改拷贝而不是原始拷贝)。

关于c++ - 对 int 的本地引用有什么好处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com