gpt4 book ai didi

C++ 函数取值,它们应该取引用

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

我刚刚学习 C++,来自 C,我在书中看到的一些函数调用让我感到困惑:

char a;
cin.get(a);

在 C 中,这不可能工作,如果你那样做,就没有办法得到输出,因为你是按值传递,而不是按引用传递,为什么这在 c++ 中工作?引用和取消引用是否隐含(编译器知道 cin.get 需要一个指针,所以它被引用)?

最佳答案

C++

这在 C++ 中可行,因为 get() 的函数签名可能是这样的:

void get(char& a); // pass-by-reference

char 之后的 & 符号向编译器表示当你传入一个 char 值时,它应该传入一个 引用 char 而不是复制它。

这实质上意味着在 get() 中所做的任何更改都将反射(reflect)在方法外部的 a 的值中。

如果 get() 的函数签名是这样的:

void get(char a); // pass-by-value

然后 a 将通过 value 传递,这意味着 a 的拷贝在作为参数传递到方法之前创建。对 a 的任何更改都只会在方法的本地发生,并在方法返回时丢失。

C

这在 C 中不起作用的原因是因为 C 只有按值传递。在 C 中模拟按引用传递行为的唯一方法是按值传递其指针,然后在修改方法:

void get(char* a)
{
*a = 'g';
}

int main(int argc, char* argv[])
{
char a = 'f';
get(&a);
printf("%c\n", a);

return 0;
}

运行这个程序会输出:

g

关于C++ 函数取值,它们应该取引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2323627/

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