-1
while(true){
    bool flag;
    while(true){
        if (conditions) {
            flag=true; 
            break;
        }
    }
}

在这种情况下,标志在退出内部 while 循环后是否重置为 false 条件?从控制台的显示看来,它仍然处于真实状态。

4

1 回答 1

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/etc的事实。依附于他们是无关紧要的。

于 2013-01-28T00:59:45.990 回答