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

时间:2015-07-15 08:17:05

标签: performance variables scope location definition

我想知道以下代码的性能有什么不同吗?例如,有三个变量,每个变量都定义了。

    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 个答案:

答案 0 :(得分:1)

代码可读性

  • 推荐做法是将声明尽可能接近使用变量的第一个位置。这也最小化了范围。 来自 Steve McConnell" Code Complete" 书:

      

    理想情况下,声明并定义每个变量,使其接近第一个变量   使用。声明建立变量的类型。定义分配   变量是一个特定的值。在支持它的语言中,例如   C ++和Java,变量应该声明并定义在哪里接近   他们是第一次使用。理想情况下,每个变量都应该在   同时它被宣布。

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

      

    仅在块的开头放置声明。 (一个块是任何代码   被花括号包围" {"并且"}"。)不要等待申报   变量直到第一次使用;它会让那些粗心的程序员感到困惑   并阻碍了范围内的代码可移植性。

  • 在函数顶部声明仅 的变量被视为不良做法。将声明放在最本地的块中。

效果

  • 事实上,这取决于。声明POD类型根本不应影响性能:调用函数时会分配所有局部变量的内存(CJavaScriptActionScript ...)。

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

  • 通常选择声明变量的位置是一个过早的优化,所以性能在这里是一个不重要的点,因为它微不足道的微观提升(或开销)。主要论点仍然是代码可读性

附加说明

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

综述

  • 考虑到上述情况,最好的方法(但仍然不是强制性的)是声明变量尽可能接近第一次使用的位置,保持范围清洁。
  • 一般情况下,只需代码可读性