2012-11-01 126 views
5

我试着去弄清楚初始化某些变量时,什么是最好的做法... 我的代码看起来像这样的时刻:环路初始化变量

int nHexCount = 0; 
int prevState = sc.state; 

bool bOnlySpaces = true; 
bool bIsValidLabel = true; 
bool bIsHotstring = false; 
bool bIsValidName = true; 
bool bIsValidExpStart = false;       

bool fInExpression = false; 
bool fInStringBlock = (sc.state == SCE_AHKL_STRINGOPTS || sc.state == SCE_AHKL_STRINGBLOCK); 

for (; sc.More(); sc.Forward()) { 

    if (sc.atLineStart) { 
     if (!fInStringBlock && sc.state != SCE_AHKL_COMMENTBLOCK) 
      sc.SetState(SCE_AHKL_DEFAULT); 

     // Reset Status 
     prevState = sc.state; 

     bOnlySpaces = true; 
     bIsValidLabel = true; 
     bIsHotstring = false; 
     bIsValidName = true; 
     bIsValidExpStart = false; 

     fInExpression = false; 
    } 

... 

因此,大家可以看到大部分这些变量我的每一个程序发现在编辑组件我工作的一个新的生产线时...复位

的问题是:

它是良好的编程习惯声明和初始化所有这些变量在for循环中,还是应该像现在一样离开它?

+2

这取决于:你需要他们的福尔循环的范围之内? – alestanis

回答

10

您应该尽可能减少变量的范围。这将改善代码的可维护性,并减少错误的发生。

// bad 
int i, j, k; 
k = 0; 
for (i = 0; i < X, ++i) 
{ 
    j = foo(i); 
    k += j; 
} 

bar(k); 

... ... VS

// better 
int k=0; // needs scope outside loop 
for (int i = 0; i < X, ++i) 
{ 
    int j = foo(i); 
    k += j; 
} 

bar(k); 
+1

通过这种方式表现如何?每次都不是昂贵的初始化它吗? – sashkello

+3

@sashkello:对于基元:没有。对于更复杂的东西:可能不是。 –

+0

因为这个原因,我已经避免了自己改变它们。那是否有任何开销? - 编辑只是阅读上面的答案。 – RaptorX