问题#1:在循环中声明一个变量是一个好习惯还是坏习惯?
我已经阅读了其他关于是否存在性能问题的线程(大多数说没有),并且您应该始终将变量声明为接近它们将被使用的位置.我想知道的是,这是否应该避免,或者它是否真的是首选.
例:
for(int counter = 0; counter <= 10; counter++)
{
string someString = "testing";
cout << someString;
}
Run Code Online (Sandbox Code Playgroud)
问题2:大多数编译器是否已经声明变量已经被声明并且只是跳过了那个部分,或者它实际上每次都在内存中为它创建了一个位置?
我有一个函数和几个嵌套循环.每个循环使用其他循环未使用的不同变量.
我的问题是出于优化考虑.
这是:哪种方法更好?
在循环体内定义局部变量
void aspProtocolDetectEvents()
{
uint8_t arrayIndex;
for( arrayIndex = 0; arrayIndex < sizeof(__aspProtocol_events); arrayIndex++ )
{
uint8_t contextBitPosition;
for(contextBitPosition = 0; __aspProtocol_events[arrayIndex] != 0; contextBitPosition++)
{
__aspProtocol_Event contextEvent = utils_getAbsoluteBitPosition(__aspProtocol_events, arrayIndex, contextBitPosition);
if( __aspProtocol_isRisenEvent(contextEvent) )
{
__aspProtocol_dispatchEvent(contextEvent);
__aspProtocol_clearEvent(contextEvent);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,最好在函数体的开头定义所有这些吗?
void aspProtocolDetectEvents()
{
uint8_t arrayIndex;
uint8_t contextBitPosition;
__aspProtocol_Event contextEvent;
for( arrayIndex = 0; arrayIndex < sizeof(__aspProtocol_events); arrayIndex++ )
{
for(contextBitPosition = 0; __aspProtocol_events[arrayIndex] != 0; contextBitPosition++)
{
contextEvent = utils_getAbsoluteBitPosition(__aspProtocol_events, arrayIndex, contextBitPosition);
if( __aspProtocol_isRisenEvent(contextEvent) …Run Code Online (Sandbox Code Playgroud)