Toán tử bậc ba C không bao giờ có thể ngắn mạch, bởi vì nó chỉ đánh giá một biểu thức duy nhất a (điều kiện), để xác định một giá trị được cho bởi biểu thức b và c , nếu bất kỳ giá trị nào có thể được trả về.
Đoạn mã sau:
int ret = a ? b : c;
Nó gần như tương đương với mã sau:
int ret;
if(a) {ret = b} else {ret = c}
Biểu thức a có thể được tạo bởi các toán tử khác như && hoặc || điều đó có thể gây ngắn mạch vì chúng có thể đánh giá hai biểu thức trước khi trả về một giá trị, nhưng điều đó sẽ không được coi là toán tử bậc ba thực hiện ngắn mạch mà là toán tử được sử dụng trong điều kiện như trong câu lệnh if thông thường.
Cập nhật:
Có một số tranh luận về toán tử bậc ba là toán tử ngắn mạch. Lập luận cho biết bất kỳ toán tử nào không đánh giá tất cả các toán hạng của nó sẽ gây ngắn mạch theo @aruisdante trong nhận xét bên dưới. Nếu đưa ra định nghĩa này, thì toán tử bậc ba sẽ bị đoản mạch và trong trường hợp đây là định nghĩa ban đầu, tôi đồng ý. Vấn đề là thuật ngữ "ngắn mạch" ban đầu được sử dụng cho một loại toán tử cụ thể cho phép hành vi này và đó là các toán tử logic / boolean, và lý do tại sao chỉ có những điều đó là những gì tôi sẽ cố gắng giải thích.
Tiếp theo bài viết Đánh giá ngắn mạch, đánh giá ngắn mạch chỉ được đề cập đến các toán tử boolean được triển khai sang ngôn ngữ theo cách mà biết rằng toán hạng đầu tiên sẽ làm cho toán hạng thứ hai không liên quan, điều này có nghĩa là, đối với toán tử && là toán hạng đầu tiên sai , và cho || toán tử đầu tiên là true , thông số C11 cũng ghi chú nó trong 6.5.13 toán tử logic AND và 6.5.14 toán tử logic OR.
Điều này có nghĩa là để xác định hành vi ngắn mạch, bạn sẽ xác định nó trong một toán tử phải đánh giá tất cả các toán hạng giống như các toán tử boolean nếu toán hạng đầu tiên không làm cho toán hạng thứ hai không liên quan. Điều này phù hợp với những gì được viết trong một định nghĩa khác về ngắn mạch trong MathWorks trong phần "Đoản mạch logic", vì ngắn mạch xuất phát từ các toán tử logic.
Như tôi đã cố gắng giải thích toán tử bậc ba C, còn được gọi là bậc ba nếu, chỉ đánh giá hai trong số các toán hạng, nó đánh giá toán hạng đầu tiên và sau đó đánh giá toán tử thứ hai, một trong hai toán tử còn lại tùy thuộc vào giá trị của đầu tiên. Nó luôn làm điều này, nó không được cho là đánh giá cả ba trong bất kỳ tình huống nào, vì vậy không có "đoản mạch" trong bất kỳ trường hợp nào.
Như mọi khi, nếu bạn thấy điều gì đó không ổn, vui lòng viết bình luận với lập luận chống lại điều này chứ không chỉ phản đối, điều đó chỉ làm cho trải nghiệm SO tồi tệ hơn và tôi tin rằng chúng ta có thể là một cộng đồng tốt hơn nhiều mà một cộng đồng chỉ phản đối câu trả lời một người không đồng ý với.