【问题标题】:Where is the best place to define variable?定义变量的最佳位置在哪里?
【发布时间】:2015-07-15 08:17:04
【问题描述】:

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

    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;
        }
    }

【问题讨论】:

    标签: performance variables scope location definition


    【解决方案1】:

    代码可读性

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

      理想情况下,声明和定义每个变量接近它的第一个位置 使用。 声明建立变量的类型。一个定义赋予 变量一个特定的值。在支持它的语言中,例如 C++ 和 Java,变量的声明和定义应接近 where 它们首先被使用。理想情况下,每个变量都应该定义在 声明的同时。

    • 尽管如此,很少 来源建议将声明放在块的开头 ({})。 来自过时 Java Code Conventions:

      仅将声明放在块的开头。 (块是任何代码 用大括号“{”和“}”包围。)不要等待声明 变量直到它们第一次使用;它会使粗心的程序员感到困惑 并妨碍范围内的代码可移植性。

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


    性能

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

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

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


    补充说明

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

    总结

    • 考虑到上述情况,最好的方法(但仍然不是强制性的)是声明变量尽可能靠近其首次使用的位置,保持范围干净。
    • 一般来说,这只是代码可读性的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2010-11-09
      • 1970-01-01
      • 2011-07-02
      • 2021-12-11
      • 1970-01-01
      相关资源
      最近更新 更多