gpt4 book ai didi

c++ - 中间变量和直接返回函数调用之间有区别吗?

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

在返回中调用函数和调用函数然后在运行时返回值之间有什么区别吗,如下所示:

我的函数原型(prototype):

int aFunc(int...);
int bFunc(int...);

我的第一个 bFunc 返回行:

int bFunc(int...)
{
...
return (aFunc(x,...));
}

我的第二个 bFunc 返回行:

int bFunc(int...)
{
...
int retVal = aFunc(x,...);
return retVal;
}

最佳答案

回答你的具体问题:两者之间不应该有明显的区别

return expression;

x = expression;
return x;

当然前提是 x 是正确的类型。

但是,在 C++ 中,

return complicated_expression;

x = some_subexpression;
y = some_other_subexpression;
return complicated_expression_rewritten_in_terms_of_x_and_y;

原因是:C++ 保证在子表达式求值期间创建的临时值的析构函数在语句 的末尾运行。此重构将与 some_expression 关联的任何临时值析构函数的副作用从 some_other_subexpression 的计算移到 的末尾>return 语句 - 之前 - 在对 x 的赋值结束时。

我见过真实世界的生产代码,其中这种重构在程序中引入了一个错误:some_other_subexpression 的计算的正确性取决于在重构过程中生成的临时值的析构函数的副作用之后运行的 some_subexpression 的评估。重写的代码更容易阅读,但不幸的是也有错误。

关于c++ - 中间变量和直接返回函数调用之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21441399/

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