函数输出参数(引用参数)在函数返回之前是否更改?[已结束]

Does a function output parameter (a reference paramter) change before the function returns? [closed]

提问人:Puya 提问时间:6/9/2023 最后编辑:πάντα ῥεῖPuya 更新时间:6/9/2023 访问量:136

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

6个月前关闭。

基本上我想知道在 C++ 中,如果我调用一个函数并通过引用传递参数,那么参数仅在函数返回后才会被修改,或者它们有可能在到达返回点之前在正文中被修改时被更改?

在函数结束时删除它们之前,我需要返回一些对象。显然,当函数返回时,无法访问已删除的对象。

C++ 函数 返回 按引用传递

评论

2赞 Jarod42 6/9/2023
“在函数结束时删除它们之前”显示代码可能会阐明您的意图...

答:

3赞 Ted Lyngmo 6/9/2023 #1

引用可以看作是它所引用的实际对象的别名,因此,每当您通过引用改变对象时,它都会直接影响被引用的对象。

void foo(int& my_int) {
    my_int = 10;        // <- the change happens exactly here

    // `an_int` declared in `main` is now 10

    // do other things ...
}

int main() {
    int an_int = 0;
    foo(an_int); 
}
1赞 Top Dev 6/9/2023 #2

当参数通过引用传递给函数时,可以在函数内部修改参数,从而影响传入的原始对象,并且这些修改可以在函数执行过程中的任何时候发生。

0赞 ShakMR 6/9/2023 #3

当您通过引用传递参数时,您发送的是内存地址,因此您对变量值所做的修改是针对内存地址的。

这意味着,如果有另一个进程使用相同的变量,他们将看到更改。如果删除该部分内存,它将影响使用它的任何人。

评论

4赞 Ted Lyngmo 6/9/2023
“另一个过程”?请澄清这一点,因为 C++ 不处理进程。
2赞 Andreas Wenzel 6/9/2023
进程函数之间有很大的区别。
0赞 ShakMR 7/5/2023
我想我在这里误用了术语过程。我认为我们最好谈谈范围。我们也可以谈论线程,但是我已经很多年没有使用C++了,线程不是一个简单的话题。