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

Where is the best place to define variable?

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

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

代码可读性

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

    Ideally, declare and define each variable close to where it’s first used. A declaration establishes a variable’s type. A definition assigns the variable a specific value. In languages that support it, such as C++ and Java, variables should be declared and defined close to where they are first used. Ideally, each variable should be defined at the same time it’s declared.

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

    Put declarations only at the beginning of blocks. (A block is any code surrounded by curly braces "{" and "}".) Don't wait to declare variables until their first use; it can confuse the unwary programmer and hamper code portability within the scope.

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


性能

  • 其实要看情况。声明 POD 类型根本不应该影响性能:在调用函数时分配所有局部变量的内存 (CJavaScriptActionScript...).

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

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


补充说明

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

总结

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