Trong khi có thể viết mã như vậy, nó có thể hơi lạ. Một usecase hơi thực tế hơn sẽ là nếu bạn có một struct T
như sau:
struct T {
bool check() const;
void fix();
};
Bây giờ bạn muốn để lặp qua tất cả mọi thứ trong struct và chạy kiểm tra trên đó, và sau đó gọi sửa chữa nếu séc trả về false. Cách đơn giản để thực hiện việc này là
for (list<T>::iterator it = mylist.begin(); it < mylist.end(); ++it)
if (!it->check())
it->fix();
Giả sử bạn muốn viết nó một cách ngắn nhất có thể. fix()
trả lại khoảng trống có nghĩa là bạn không thể chỉ cần đặt nó trong điều kiện. Tuy nhiên, sử dụng toán tử dấu phẩy bạn có thể làm được việc này:
for (auto it = mylist.begin(); it != mylist.end() && (it->check() || (it->fix(), true)); ++it);
tôi sẽ không sử dụng nó mà không có một lý do đặc biệt tốt, nhưng nó không cho phép bạn gọi bất kỳ chức năng từ một điều kiện, có thể được thuận tiện.
Nguồn
2011-11-16 11:35:17
Nó được gọi là toán tử dấu phẩy: http://www.cplusplus.com/doc/tutorial/operators/. –
Đó phải là câu trả lời, không phải là một bình luận. – Mysticial
Tất nhiên, ví dụ ở đây là C++, không phải C. :-) – ibid