布尔标志重置

bool flag reset?

本文关键字:标志 布尔      更新时间:2023-10-16
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.这一事实是无关紧要的。