定义变量的最佳位置在哪里?
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 类型根本不应该影响性能:在调用函数时分配所有局部变量的内存 (C
、JavaScript
、ActionScript
...).
请记住,编译器会优化您的代码,所以我想非 POD 类型也不会成为问题 (C++
)。
通常选择声明变量的地方是过早的优化,因此性能在这里是不重要的一点,因为它微观提升(或开销)微不足道。主要论点仍然是代码可读性。
补充说明
- 在
C99
(C
语言)标准之前,必须在块的 开头 声明变量。
总结
- 考虑到上述情况,最好的方法(但仍然不是强制性的)是在尽可能靠近第一次使用的地方声明变量,保持范围干净。
- 一般来说,这只是代码可读性。
的问题
我想知道下面的代码在性能或其他方面有什么不同吗?例如有三个变量,每一个都定义了何时使用。
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 类型根本不应该影响性能:在调用函数时分配所有局部变量的内存 (
C
、JavaScript
、ActionScript
...).请记住,编译器会优化您的代码,所以我想非 POD 类型也不会成为问题 (
C++
)。通常选择声明变量的地方是过早的优化,因此性能在这里是不重要的一点,因为它微观提升(或开销)微不足道。主要论点仍然是代码可读性。
补充说明
- 在
C99
(C
语言)标准之前,必须在块的 开头 声明变量。
总结
- 考虑到上述情况,最好的方法(但仍然不是强制性的)是在尽可能靠近第一次使用的地方声明变量,保持范围干净。
- 一般来说,这只是代码可读性。 的问题