最佳定义变量的位置在哪里?

4

我想知道下面的代码在性能或其他方面是否有任何区别?例如,有三个变量,每个变量代表什么时使用。

    bool myFunc()
    {
        string networkName;
        if ( !Parse(example, XML_ATTRIBUTE_NAME, networkName) )
        {
            return false;
        }

        BYTE networkId;
        if ( !Parse(example, XML_ATTRIBUTE_ID, networkId) )
        {
            return false;
        }

        string baudRate;
        if ( !Parse(example, XML_ATTRIBUTE_BAUDRATE, baudRate) )
        {
            return false;
        }
    }

以上代码和以下代码在性能或其他方面有区别吗?
    bool myFunc()
    {
        string networkName;
        string baudRate;
        BYTE networkId;

        if ( !Parse(example, XML_ATTRIBUTE_NAME, networkName) )
        {
            return false;
        }

        if ( !Parse(example, XML_ATTRIBUTE_ID, networkId) )
        {
            return false;
        }

        if ( !Parse(example, XML_ATTRIBUTE_BAUDRATE, baudRate) )
        {
            return false;
        }
    }
1个回答

7

代码可读性

  • 推荐的做法是将变量声明尽可能靠近第一次使用它的地方。这也可以最小化作用域。 来自Steve McConnell的《代码大全》书:

    理想情况下,应该在使用变量的地方附近进行声明和定义。 声明会建立变量的类型。定义会为变量分配一个特定的值。在支持此功能的语言(如C++和Java)中,变量应在首次使用它们的附近进行声明和定义。理想情况下,每个变量应在声明时同时定义。

  • 然而,少数来源建议将声明放在块({})的开头。 来自过时的Java Code Conventions:

    只在块的开头放置声明。(块是由花括号“{”和“}”包围的任何代码。)不要等到第一次使用变量再声明;这可能会让不熟悉程序员感到困惑,并妨碍作用域内代码的可移植性。

  • 只在函数顶部声明变量被认为是不好的做法。将声明放在最局部的块中。


性能

  • 实际上,这取决于情况。声明POD类型不应该对性能产生影响:当您调用函数时,所有本地变量的内存都会分配(C, JavaScript, ActionScript...)。

  • 请记住,编译器会优化您的代码,所以我猜非POD类型也不会成为问题(C++)。

  • 通常选择声明变量的位置是一种过早的优化,因此由于微不足道的微小提升(或开销),性能在这里并不重要。主要的论据仍然是代码可读性


附加说明

  • C99(C语言)标准之前,变量必须在块的开头声明。

总结

  • 考虑到以上内容,最好的方法(但仍不是强制性的)是尽可能靠近第一次使用变量的地方声明变量,保持作用域干净。
  • 总的来说,这只是一个代码可读性的问题。

嗨@kefir500,只在函数顶部声明变量被认为是不良实践。请把声明放在最本地的块中。你说这话是什么意思? - Tri Bui Quang
这是指在作用域的开头声明变量还是在使用该变量之前声明? - Tri Bui Quang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接