while(true){
bool flag;
while(true){
if (conditions) {
flag=true;
break;
}
}
}
在这种情况下,标志在退出内部 while 循环后是否重置为 false 条件?从控制台的显示看来,它仍然处于真实状态。
不,没有“重置”。没有任何魔法。事实上,flag
甚至不会false
为你神奇地初始化,你必须自己做。
我认为您正在考虑范围和阴影的经典示例:
int a = 4;
//a is 4 here
{
int a = 3;
//a is 3 here
}
//a is 4 here
但这里也没有魔法。有两个不同的变量a
碰巧共享一个名称。a
在内部块中指的是第二个整数。如果您可以引用第一个整数,那么您将读取一个完全不同的整数。
这里有一些魔法:
SomeClass x; //x's constructor is called
{
SomeOtherClass y; //y's constructor is called
} //y's destructor is called
由于y
是自动的,它会在其作用域结束时被销毁。(顺便说一下,第二个也是如此a
,只是没有办法告诉。)如果它有一个析构函数,它将被调用。如果它的析构函数做了一些花哨的事情,比如“重置一些标志”,你会看到结果。(只有不通过y
,这将消失。)
{}
没有 if/while/function/etc的事实。依附于他们是无关紧要的。