多くの場合、このようなループが必要です
do
{
Type value(GetCurrentValue());
Process(value);
}while(condition(value));
value
のスコープは で終了するため、残念ながらこれはコンパイルされません}
。つまり、ループの外で宣言する必要があります。
Type value;
do
{
value = GetCurrentValue();
Process(value);
}while(condition(value));
私は少なくとも 2 つの理由でこれが好きではありません。1 つには、ローカルで宣言するのが好きです。そして第二に、値が代入可能またはデフォルト構築可能ではなく、コピー構築可能のみである場合、これは問題です。
したがって、私の質問には 2 つの側面があります。まず、do while のスコープを最終条件に拡張する際に特定の理由/問題があったかどうかを知りたいです (for ループで宣言された変数のスコープに for ループの本体が含まれているのと同じように、物理的には中かっこの外側)。そして、私の最初の質問への答えが「それはまさにその通りです。なぜという質問をしないでください」だと思うなら。それから、私の例にあるものと同様の do-while ループを書くのに役立つイディオムがあるかどうかを知りたいのですが、私が言及した欠点はありません。
質問が明確であることを願っています。