在外面做条件往往不是我们需要这样的为什么是同时的,而范围
do
{
Type value(GetCurrentValue());
Process(value);
}while(condition(value));
循环不幸的是这不会编译,因为value
的范围在}
结束。这意味着我将不得不在循环之外声明它。
Type value;
do
{
value = GetCurrentValue();
Process(value);
}while(condition(value));
我不喜欢这至少有两个原因。首先,我喜欢在本地声明事物。其次,如果值不可分配或缺省可构造,但只有可复制构造,则这是一个问题。
所以,我的问题有两面。首先,我想知道是否有一个特定的原因/困难,将do的范围扩展到最终条件(就像for循环中声明的变量的范围包含for循环的主体,尽管它的物理存在在大括号之外)。如果你相信我的第一个问题的答案是“这只是它的方式,不要问为什么问题。”那么我想知道是否有成语可以帮助编写类似于我的示例中的do-while循环,但没有我提到的缺点。
希望问题很清楚。
你意识到这是每一个其他类型的循环一样,对不对?这不是特定于做/当,所以你真的要求做/是一个特殊情况。 –
您可以通过使用'for'循环来保留条件变量的作用域,而不是使用'for'循环来清理它。 –
*我们经常需要**这样的循环* - >在很多年里,我没有使用过* do-while *循环。 –