繁体   English   中英

反复呼唤 - 编码实践

[英]repeated calling - coding practice

你更倾向哪个? (当然getSize不做任何复杂的计数,只返回成员值)

void method1(Object & o)
{
    int size = o.getSize();

    someAction(size);
    someOtherAction(size);
}

要么

void method2(Object & o)
{
    someAction(o.getSize());
    someOtherAction(o.getSize());
}

我知道我可以测量哪一个更快但我想要一些评论......不只是执行时间相关...例如。 如果你更喜欢method2,你最多使用o.getSize多少次,你使用method1方式的数字是多少? 任何最佳做法? (想象甚至不同类型然后int)TY

我会选择方法1,不仅因为它可能稍微快一点,而且主要是因为这意味着我不必担心被调用的方法是否有任何副作用。

此外,如果在多线程程序中调用它,这可以确保我总是使用的大小值 - 否则它可能在两次调用之间发生了变化。 当然,在某些情况下,您可能明确地想要注意到该更改,在这种情况下使用方法2。

(是的,根据其他答案,将size设为const int以确保在通过引用其他内容传递时不会修改它)。

由于您不希望在调用someAction()someOtherAction()时更改size (因为它不是函数的返回值时),请考虑:

void method3(const Object& o)
{
    const int size = o.getSize();

    someAction(size);
    someOtherAction(size);
}

getSize()可能很简单,或者可能正在进行昂贵的计算。 此外, o的大小可能会被调用someAction()someOtherAction()之间的另一个线程更改。

我更喜欢第一种方法。 重复调用函数对我来说似乎并不好,特别是如果返回的值每次都相同。 第一种方法还避免了重复调用函数的开销。

当我调用一个多次返回多次(大约2-3次)的函数时,我通常将返回的值保存在局部变量中。 那是因为我更喜欢节目速度而不是节省内存。 不是说记忆不重要。 这取决于具体情况。 调用一个不需要花费大量时间执行的函数并不费时,但是多次调用多个循环的函数会使程序进入长时间等待状态。

第一个将消除对函数的不必要的调用,因此我更喜欢method1(),因为代码看起来也更清晰。

但是,您应该知道,根据上下文,它们可能会产生不同的结果。 比如,如果someAction()中的大小发生变化,并且您使用存储在size变量中的值,则可能无法获得所需的结果。

当结果不会改变时反复调用任何函数是一种浪费,所以我总是采用第一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM