gpt4 book ai didi

c++ - 关于引用文献的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:24:06 25 4
gpt4 key购买 nike

我认为以下是非常基本的,但我真的不明白其中一个代码的“优势”是什么。

有这个:

int main()
{
int a = 10;
f(a);
return 0;
}

有什么区别

void f(int& a)
{
int& b = a;
}

void f(int& a)
{
int b = a;
}

特别是,在 f 代替类的构造函数并且我们有一个大对象而不是 int 的情况下。

我会选择第二种可能性......你怎么看?

谢谢。

编辑:

首先,看答案,虽然我发问题的时候脑残了,但实际上我在评论中发现了有趣的子问题(和答案!)。

最佳答案

首先:

void f(int& a) {
int& b = a;
}

调用者传入一个a,我们得到它作为对调用者的a的引用。然后我们创建一个新的引用 b,它引用 a,它仍然是调用者的 a。因此,调用者所做的任何更改都将对 f 及其包含类可见,并且 fab 将影响调用者作为 a 传递的内容。

void f(int& a) {
int b = a;
}

这里,b 是一个新变量,一个int,它采用a拷贝。对 b 所做的更改不会影响调用者,调用者也不会影响 b。但是编写相同内容的更快方法是:

void f(int b) {
}

并完全放弃 a 引用。特别是,这在原型(prototype)中表明该函数不会修改其参数,因为它不能;而 void f (int &a) 的原型(prototype)表明它可能修改a

编辑:如果您需要避免任何复制,第三个选项 (tm) 是对 const 的引用:

void f(const int &a) {
const int &b = a;
}

f中,ab都不能修改,所以不会影响调用者,但是通过使用避免了复制对 const 的引用。仍然存在一个潜在的问题,即调用者对 a 的任何更改都将在对象内部可见,因为只有一个实际数据项 a 并且它有很多名称;这是您必须记录的内容,以确保调用者不会做任何此类事情。

关于c++ - 关于引用文献的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3616804/

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