Why is while's condition outside the do while scope

走远了吗. 提交于 2019-11-30 17:20:24

If you'd like to keep value locally scoped for the while loop, you can do this instead:

do
{
     Type value(GetCurrentValue());
     Process(value);
     if (! condition(value) )
         break;
} while(true);

This is just personal preference, but I find while loops structured like the following more readable (while instead of do-while):

while(true) {
    Type value(GetCurrentValue());
    Process(value);
    if (! condition(value) ) {
        break;
    }
}

The scoping rules in C/C++ works as follows: Local variables declared within a brace {...} block is local / visible only to that block. For example:

int a = 1;
int b = 2; 
{
    int c = 3;
}
std::cout << a;
std::cout << b;
std::cout << c;

will complain about c being undeclared.

As for rationale - it's just a matter of consistency and "that's just how the language is defined"

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!