Thường xuyên hơn không, chúng ta cần vòng như thế nàyTại sao tình trạng trong khi của bên ngoài làm trong khi phạm vi
do
{
Type value(GetCurrentValue());
Process(value);
}while(condition(value));
Đáng tiếc là điều này sẽ không biên dịch, vì phạm vi value
's kết thúc vào }
. Có nghĩa là tôi sẽ phải khai báo nó bên ngoài vòng lặp.
Type value;
do
{
value = GetCurrentValue();
Process(value);
}while(condition(value));
Tôi không thích điều này vì ít nhất hai lý do. Đối với một, tôi thích tuyên bố mọi thứ cục bộ. Và thứ hai, đây là vấn đề nếu giá trị không thể gán hoặc mặc định có thể cấu hình được, nhưng chỉ có thể sao chép được.
Vì vậy, câu hỏi của tôi có hai mặt. Đầu tiên, tôi muốn biết nếu có một lý do cụ thể/khó khăn trong việc mở rộng phạm vi làm trong khi đến điều kiện cuối cùng (cũng như phạm vi của các biến được khai báo trong vòng lặp bao gồm phần thân của vòng lặp mặc dù nó có thể chất bên ngoài niềng răng). Và nếu bạn tin rằng câu trả lời cho câu hỏi đầu tiên của tôi là "Nó chỉ là cách nó được. Đừng hỏi tại sao câu hỏi." sau đó tôi muốn biết nếu có thành ngữ có thể giúp viết vòng lặp do-while tương tự như những cái trong ví dụ của tôi nhưng không có những nhược điểm tôi đã đề cập.
Hy vọng câu hỏi sẽ rõ ràng.
Bạn nhận ra điều này giống nhau đối với mọi loại vòng lặp khác, phải không? Điều này không phải là cụ thể để làm/trong khi, vì vậy bạn đang thực sự yêu cầu làm/trong khi là một trường hợp đặc biệt. –
Bạn có thể xóa sạch điều này trong khi vẫn giữ lại phạm vi của biến điều kiện bằng cách sử dụng vòng lặp 'for' thay thế. –
* Thường xuyên hơn chúng ta không cần ** vòng lặp như thế này * -> Tôi đã không sử dụng vòng lặp * do-while * trong một vài năm. –