while(true){
bool flag;
while(true){
if (conditions) {
flag=true;
break;
}
}
}
在这种情况下,标志在退出内部while循环后是否重置为false状态?从控制台的显示器看,它仍处于真实状态。
答案 0 :(得分:1)
不,没有“重置”。没有任何魔法。事实上,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 /等的事实。附在他们身上是无关紧要的。