2011-01-04 22 views
16

Có loại điều:Thuật ngữ "vòng trống" đề cập chính xác trong C và C++ là gì?

for(;;) 
{ 
    statements; 
} 

Hoặc là nó này:

for(initialisation;condition;updation) 
{ 
} 

Tôi đang tìm kiếm câu trả lời với tham chiếu đến nhiều nguồn khác nhau.

+0

Đọc thêm: [Là một (rỗng) vô hạn lặp lại hành vi không xác định trong C?] (http: // stackoverflow.com/questions/15595493/is-an-empty-vô hạn-loop-undefined-behavior-in-c) – Deduplicator

Trả lời

26

trường hợp đầu tiên của bạn (cho với các biểu thức có sản phẩm nào) là một vô hạn vòng lặp và điều thứ hai (nội dung trống của cho tuyên bố) là một trống loop

+4

Đối với bản ghi, phần thân của một lop rỗng có thể được bỏ qua một cách rõ ràng: 'for (initialisation; condition; updation) ; ' –

+0

@ Péter Có, và câu lệnh trống đó được gọi là 'tuyên bố không'. Áp dụng cho các câu lệnh 'while'. –

+4

và hai không phải là mutexive: 'for (;;);' là một vòng lặp vô hạn rỗng! – ybungalobill

4

Trong môi trường của tôi nó là như thế này:

for(;;) { statements; } 

vô tận vòng lặp

for(initialisation;condition;updation) { } 

vòng lặp trống

2

Nó tương đương với:

while (true) { 
    statements; 
} 

Infinite vòng lặp for là một vòng lặp mà làm việc cho đến khi cái gì khác dừng nó.

+1

Đó là một vòng lặp * vô hạn *, không phải là trống ... –

+0

@Martin, tôi đã tự nhận xét về câu trả lời, không phải bình luận của bạn - xin lỗi vì sự nhầm lẫn :-) –

+0

Cảm ơn, câu trả lời đã chỉnh sửa. –

2

Câu trả lời phụ thuộc vào ngữ cảnh.

Nếu bạn có nghĩa là một sản phẩm nào cho vòng lặp, sau đó

for(;;) 
{ 
    statements; 
} 

là một điều như vậy.

Mặc dù, điều tương tự có thể đạt được với một vòng lặp while:

while(true) 
{ 
    statements; 
} 

và điều này không phải là một "trống rỗng" vòng lặp. Cả hai trong số này là các vòng lặp vô hạn mà bạn phải thoát ra khỏi việc sử dụng break bên trong vòng lặp của bạn.

Mặt khác,

for(initialisation;condition;updation) 
{ 
} 

đây là một vòng lặp "trống rỗng" mà bascially không có gì, ngoại trừ có lẽ cập nhật một số biến mà có thể được xác định trước khi vòng lặp chính nó.

+0

Vòng lặp cuối cùng có thể thực hiện rất tốt và rất nhiều thứ, bởi vì việc cập nhật có thể có tất cả các loại tác dụng phụ - nếu bạn muốn bạn có thể sử dụng hầu hết ứng dụng của mình trong đó. Tôi chắc chắn khuyên bạn nên chống lại nó từ quan điểm bảo trì của xem, nhưng giả định rằng cuối cùng 'về cơ bản không có gì' khi bạn tìm thấy một vòng lặp trong mã không rõ chắc chắn không phải là khôn ngoan. – Inca

+0

Tôi nghĩ rằng bạn cần chỉnh sửa, bạn tuyên bố rằng vòng lặp 'for' đầu tiên là rỗng và không rỗng. – unwind

1

Vòng lặp trống là vòng lặp có thân trống, ví dụ:

for(int i = 0; i < 10; ++i) {} 
while(cin) {} 

(lưu ý rằng ví dụ thứ hai ở đây cũng sẽ xảy ra là vô tận)

Có những trường hợp này rất hữu ích, ví dụ như khi một hàm có tác dụng phụ mong muốn và trả về thành công của nó, và nên lặp lại cho đến khi không thành công, ví dụ để đọc dòng cuối cùng trong một tệp:

std::string getLastLine(std::string filename) 
{ 
    std::ifstream in(filename.c_str()); 
    if(!in) 
    return ""; 

    std::string line; 
    while(std::getline(in, line)); // empty loop, the operation returns the condition 
    return line; 
} 
Các vấn đề liên quan