ภาษา C จะมี conditional expression (?:) ซึ่งทำหน้าที่เป็น if statement สำหรับ expression โดยเฉพาะ เช่น
int a, b; ... a = b==1 ? 1 : 2; ...
จะกำหนดค่าของ a เป็น 1 หรือ 2 ขึ้นอยู่กับค่าของ b ดังนั้น conditional expression ในกรณีนี้ จึงทำงานเหมือน
if (b==1) a=1; else a=2;
เมื่อวานนี้หลังจากลองทำการบ้านแล็บที่ให้นักศึกษาไป เพิ่งรู้ว่าภาษาซี จะกำหนด type ของ conditional expression ในเวลา compile โดยส่วนใหญ่อาศัยกฎ implicit cast เลยขอจดเอาไว้หน่อย เช่น
int a,b; int i; float f; ... a = b==1 ? i : f; ...
Type ของ conditional expression นี้ จะเป็น float เนื่องจากมี int กับ float เป็น operand ที่ 2 กับ 3 จึงเป็นไปตามกฎคือ เปลี่ยน int เป็น float ดังนั้น ใน expression นี้ ถึงแม้ว่า b จะมีค่าเท่ากับ 1 ก็จะเกิดการ promote ค่า i ให้เป็น float ก่อน แล้วจึง demote กลับไปเป็น int อีกครั้งเวลากำหนดค่าให้ a
No comments:
Post a Comment