เรารู้ว่ามีการใช้ตัวดำเนินการ 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 สำหรับการแปลง หากการแปลงได้รับการปฏิบัติอย่างชัดแจ้ง คอมไพเลอร์จะแสดงข้อผิดพลาด หากคอมไพเลอร์ตัวใดสามารถพลาดการตรวจจับข้อผิดพลาดดังกล่าว โปรแกรมอาจล้มเหลวในขณะดำเนินการหรือรันไทม์