c++ - 函数调用与局部变量

标签 c++ function variables call local

我经常看到多次调用其他函数而不是存储一次函数结果的函数。

(1):

void ExampleFunction()
{ 
    if (TestFunction() > x || TestFunction() < y || TestFunction() == z)
    {
        a = TestFunction();
        return; 
    }
    b = TestFunction();
}

相反,我会这样写,(2):

void ExampleFunction()
{
    int test = TestFunction();
    if (test > x || test < y || test == z)
    {
        a = test;
        return;
    }
    b = test;
}

我认为版本 2 更易于阅读和调试。 但我想知道为什么人们喜欢排名第一的人? 有什么我没看到的吗?性能问题? 当我查看它时,我看到在最坏的情况下,数字 (1) 中有 4 个函数调用,而不是数字 (2) 中的 1 个函数调用,因此数字 (1) 中的性能应该更差,不是吗?

最佳答案

如果我想强调在整个代码中使用相同的值,或者如果我想强调该值的类型是 int,我会使用 (2)。强调真实但不明显的事情可以帮助读者快速理解代码。

如果我不想强调这些事情中的任何一个,我会使用 (1),特别是如果它们不是真的,或者 TestFunction() 被调用的次数由于副作用很重要。

显然,如果您强调某些当前 为真,但随后 TestFunction() 发生变化并且它变为假,那么您就有了错误。所以我也想自己控制 TestFunction(),或者对作者的 future 兼容性计划有一些信心。通常这种信心很容易:如果 TestFunction() 返回 CPU 的数量,那么您很乐意对该值进行快照,并且您也很乐意将其存储在 int 不管它实际返回什么类型。您必须对 future 的兼容性有最低限度的信心才能使用某个功能,例如相信它不会在未来返回键盘的数量。但不同的人有时对什么是“重大变更”有不同的看法,尤其是当接口(interface)没有被准确记录时。因此,对 TestFunction() 的重复调用有时可能是一种防御性编程。

关于c++ - 函数调用与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12494401/

相关文章:

c++ - 在 macOS 上从源代码构建 Qt 时出错

c++ - QGridLayout 中一致的行大小

angularjs - AngularJS-无法访问$ http内的外部变量

php - 全局变量与局部变量

C++,find_if 不工作

c++ - 如何在 C++ 代码上使用 Tcl-C API

javascript - jQuery 函数作为一个字符串,参数作为数组(JavaScript "apply()"等同于 jQuery 元素)

c++:没有重载函数的实例

php - 如何在 php 中定义类的属性?

matlab - 当一维未知时在循环之前定义一个矩阵