有些语句允许在它们的控制结构中定义变量:
while(int i=get_num())
cout<<i<<endl;
i=0; //error:i is not accessible outside the loop
--------------------------------------------------------------我是有压力的分割线-------------------------------------------
注解:在条件表达式中定义的变量必须初始化,该条件检验的就是初始化对象的值
---------------------------------------------------------------有压力的分割线----------------------------------------------
在语句的控制结构中定义的变量,仅在定义它们的块语句结束前有效.这种变量的作用域限制在语句体内.通常,语句体本身就是一个块语句,其中也可能包含了其他的块.一个在控制结构里引入的名字是该语句的局部变量,其作用域局限在语句内部.
//index is visible only within the for statement
for(vector<int>::size_type index=0;index!=vec.size();++index)
{
//new scope,nested within the scope of this for statement
int square=0;
if(index%2) //ok:index is in scope
square=index*index;
vec[index]=square;
}
if(index!=vec.size()) //error:index is not visible here
如果程序需要访问某个控制结构中的变量,那么这个变量必须在控制语句外部定义.
vector<int>::size_type index=0;
for(/*empty*/;index!=vec.size();++index)
//as before (就是跟上面的块语句一样,省略了)
if(index!=vec.size()) //ok:now index is in scope
//as before
------------------------------------------------------------------我是饥饿的分割线---------------------------------------
注解:早期的C++版本以不同的方式处理for语句中定义的变量的作用域:将for语句头定义的变量视为在for语句之前定义.有些更旧式的C++程序代码允许在for语句作用域外访问控制变量.
------------------------------------------------------------------我是饥饿的分割线-------------------------------------
对于在控制语句中定义的变量,限制其作用域的一个好处是,这些变量名可以重复使用而不必担心它们的当前值在每一次使用时是否正确.对于作用域外的变量,是不可能用到其在作用域内的残留值的.