Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โอเปอเรเตอร์ ternary แบบมีเงื่อนไข ( ?:) ใน C++


โอเปอเรเตอร์แบบมีเงื่อนไข (? :) คือโอเปอเรเตอร์แบบไตรภาค (ใช้ตัวถูกดำเนินการสามตัว) ตัวดำเนินการเงื่อนไขทำงานดังนี้ -

  • ตัวถูกดำเนินการแรกถูกแปลงเป็นบูลโดยปริยาย มีการประเมินและผลข้างเคียงทั้งหมดจะเสร็จสิ้นก่อนดำเนินการต่อ
  • ถ้าตัวถูกดำเนินการแรกประเมินเป็นจริง (1) ตัวถูกดำเนินการที่สองจะถูกประเมิน
  • หากตัวถูกดำเนินการแรกมีค่าเป็นเท็จ (0) ตัวถูกดำเนินการที่สามจะถูกประเมิน

ผลลัพธ์ของตัวดำเนินการแบบมีเงื่อนไขคือผลลัพธ์ของตัวถูกดำเนินการใดๆ ที่ได้รับการประเมิน — ตัวดำเนินการที่สองหรือตัวที่สาม เพียงหนึ่งในสองตัวถูกดำเนินการสุดท้ายจะถูกประเมินในนิพจน์เงื่อนไข การประเมินตัวดำเนินการตามเงื่อนไขนั้นซับซ้อนมาก ขั้นตอนข้างต้นเป็นเพียงการแนะนำสั้นๆ นิพจน์เงื่อนไขมีการเชื่อมโยงจากขวาไปซ้าย ตัวถูกดำเนินการแรกต้องเป็นอินทิกรัลหรือประเภทตัวชี้ กฎต่อไปนี้ใช้กับตัวถูกดำเนินการที่สองและสาม -

  • ถ้าตัวถูกดำเนินการทั้งสองเป็นชนิดเดียวกัน ผลลัพธ์จะเป็นชนิดนั้น
  • หากตัวถูกดำเนินการทั้งสองเป็นเลขคณิตหรือประเภทการแจงนับ การแปลงเลขคณิตปกติ (ครอบคลุมอยู่ใน Conversion มาตรฐาน) จะถูกแปลงเป็นประเภททั่วไป
  • หากตัวถูกดำเนินการทั้งคู่เป็นประเภทตัวชี้หรือตัวหนึ่งเป็นประเภทตัวชี้ และอีกตัวเป็นนิพจน์คงที่ที่ประเมินเป็น 0 ตัวดำเนินการแปลงตัวชี้จะถูกแปลงเป็นประเภททั่วไป
  • หากตัวถูกดำเนินการทั้งสองเป็นประเภทอ้างอิง จะมีการแปลงข้อมูลอ้างอิงเพื่อแปลงเป็นประเภททั่วไป
  • ถ้าตัวถูกดำเนินการทั้งสองชนิดเป็นโมฆะชนิดทั่วไปคือชนิดเป็นโมฆะ
  • หากตัวถูกดำเนินการทั้งสองเป็นประเภทที่ผู้ใช้กำหนดเหมือนกัน ชนิดทั่วไปก็คือประเภทนั้น
  • หากตัวถูกดำเนินการมีประเภทที่แตกต่างกัน และตัวถูกดำเนินการอย่างน้อยหนึ่งตัวมีประเภทที่ผู้ใช้กำหนด กฎของภาษาจะถูกใช้เพื่อกำหนดประเภททั่วไป (ดูคำเตือนด้านล่าง)

ตัวอย่าง

#include <iostream>  
using namespace std;  

int main() {  
   int i = 1, j = 2;  
   cout << ( i > j ? i : j ) << " is greater." << endl;  
}

ผลลัพธ์

สิ่งนี้จะให้ผลลัพธ์ -

2 is greater.