เรารู้ว่ามีการใช้ตัวดำเนินการ ternary แทน if..else clause มันถูกแทนด้วย ?:. '?' สัญลักษณ์เทียบเท่ากับถ้าส่วนหนึ่งและ ':' เทียบเท่ากับส่วนอื่น 3 โปรแกรมต่อไปนี้จะอธิบายข้อสังเกตที่น่าสนใจบางประการสำหรับตัวดำเนินการแบบไตรภาค
โปรแกรมต่อไปนี้สามารถคอมไพล์ได้โดยไม่มีข้อผิดพลาด ประเภทการส่งคืนของนิพจน์ Ternary คาดว่าจะเป็น float (เหมือนของ exp2) และ exp3 (เช่น literal zero - int type) สามารถแปลงเป็น float ได้โดยปริยาย
#include <iostream> using namespace std; int main(){ int test1 = 0; float fvalue = 3.111f; cout<< (test1 ? fvalue : 0) << endl; return 0; }
โปรแกรมต่อไปนี้จะไม่สามารถคอมไพล์ได้ เหตุผลก็คือคอมไพเลอร์ไม่สามารถค้นหาหรือค้นหาประเภทส่งคืนของ ternary expression หรือการแปลงโดยปริยายไม่พร้อมใช้งานระหว่าง exp2 (char array) และ exp3 (int)
#include <iostream> using namespace std; int main(){ int test1 = 0; cout<< test1 ? "A String" : 0 << endl; return 0; }
โปรแกรมต่อไปนี้อาจสามารถคอมไพล์ได้ หรือล้มเหลวขณะรันไทม์ ประเภทการส่งคืนของนิพจน์ Ternary ถูกจำกัดหรือจำกัดเป็นประเภท (char *) แต่นิพจน์จะส่งกลับค่า int ดังนั้นโปรแกรมจึงล้มเหลว ตามตัวอักษร โปรแกรมพยายามพิมพ์สตริงที่อยู่ที่ 0 ณ เวลาดำเนินการหรือรันไทม์
#include <iostream> using namespace std; int main(){ int test1 = 0; cout << (test1 ? "A String" : 0) << endl; return 0; }
เราสามารถสังเกตได้ว่า exp2 ถือเป็นประเภทเอาต์พุต และ exp3 จะสามารถแปลงเป็น exp2 ได้ ณ เวลาดำเนินการหรือรันไทม์ หากการแปลงได้รับการปฏิบัติโดยปริยาย compilerinserts stubs สำหรับการแปลง หากการแปลงได้รับการปฏิบัติอย่างชัดแจ้ง คอมไพเลอร์จะแสดงข้อผิดพลาด หากคอมไพเลอร์ตัวใดสามารถพลาดการตรวจจับข้อผิดพลาดดังกล่าว โปรแกรมอาจล้มเหลวในขณะดำเนินการหรือรันไทม์