2012-07-31 12 views
7

thời gian gần đây tôi thấy sau trong codebase:Cú pháp toán tử điều kiện kỳ ​​lạ này là gì?

bool bRes = (a < b) ? a=b, true : false; 

Nếu a < b, sau đó a=b được thực thi và bRes là đúng. Chính xác những gì đang xảy ra ở đây? Các tài liệu cho toán tử điều kiện không đề cập đến bất cứ điều gì về các biểu thức chuỗi.

chỉnh sửa: để rõ ràng tôi nhận được phần điều hành có điều kiện, đó là a=b, true dưới dạng một biểu thức khiến tôi bối rối.

+2

đó là các nhà điều hành dấu phẩy ... – MFH

Trả lời

11

Eww. Đó là cách sử dụng của comma operator. a=b, true thực hiện chính xác những gì bạn đã nói. Nó thực thi mỗi biểu thức và kết quả trong giá trị của biểu thức cuối cùng.

+1

1 eww ... là phản ứng đầu tiên của tôi là tốt. –

+1

+1 Hahahaha ... bạn đã không thấy sử dụng "eww" thực sự của toán tử dấu phẩy. Yêu thích toàn thời gian của tôi là trong [coder phạm vi carryless của Subbotin] (http://koders.com/cpp/fidAD810238688D2DDBC02B8FAF0A8EAC8DBD68604D.aspx?s=subbotin#L21). Chỉ cần nhìn vào dòng đó trong ít hơn 30 giây, và sau đó cố gắng giải thích những gì đang xảy ra. – Damon

+0

Rất tuyệt, cảm ơn! – nolegs

4

Đó là mã đúng, nhưng được viết theo kiểu lạ. Ngôn ngữ cho phép sử dụng toán tử dấu phẩy theo cách này.

Tương đương là

bool bRes; 
if (a < b) 
{ 
a = b; 
bRes = true; 
} 
else 
bRes = false; 
+0

đây là cách tốt hơn để viết cùng một điều. Làm tốt lắm! –

+0

Nhưng bây giờ nó là nhiệm vụ và không khởi tạo. Trong mã ban đầu, chúng ta có thể đã khai báo 'bRes' thành' const' ... –

+2

@KerrekSB: Điểm tốt. Làm thế nào về 'const bool bRes = a Andrey