Toán tử ba ngôi (?:) thay cho if..else. '?' tương đương if, ':' tương đương else. 3 chương trình dưới minh họa quan sát thú vị.
Chương trình 1 biên dịch không lỗi. Kiểu trả về mong đợi là float (của exp2), exp3 (hằng 0 - int) chuyển ngầm sang float.
#includeusing namespace std; int main(){ int test1 = 0; float fvalue = 3.111f; cout << (test1 ? fvalue : 0) << endl; return 0; }
Chương trình 2 KHÔNG biên dịch được: trình biên dịch không tìm thấy kiểu trả về của biểu thức ba ngôi hoặc chuyển ngầm không có sẵn giữa exp2 (mảng char) và exp3 (int).
#includeusing namespace std; int main(){ int test1 = 0; cout << test1 ? "A String" : 0 << endl; return 0; }
Chương trình 3 có thể biên dịch nhưng lỗi runtime. Kiểu trả về bị giới hạn là (char *), nhưng biểu thức trả về int -> lỗi. Chương trình cố in chuỗi tại địa chỉ 0 lúc chạy.
#includeusing namespace std; int main(){ int test1 = 0; cout << (test1 ? "A String" : 0) << endl; return 0; }
Quan sát: exp2 được xem là kiểu đầu ra, exp3 chuyển sang exp2 lúc runtime. Nếu chuyển ngầm -> compiler chèn stub chuyển đổi. Nếu chuyển tường minh -> compiler báo lỗi. Nếu compiler bỏ sót lỗi -> chương trình fail lúc chạy.