Jan 3 2009

เปรียบเทียบการเท่ากัน 3 ค่าใน C++

Category: Nativem3rLinEz @ 01:09

วันนี้มีคำถามครับ

เรื่องนี้มีอยู่ว่า จะต้องเปรียบเทียบค่า 3 ค่า ว่ามันเท่ากันรึเปล่า

ผมเขียนอะไรประมาณนี้ลงไป

if(a == b == c){

// Statements

}

ปรากฎว่า Compile ผ่าน และรันได้แฮะ (VC++) แต่ผลลัพธ์ไม่ตรงตามที่ต้องการ ก็นั่งหาอยู่นานว่าเกิดอะไรขึ้น

ให้เวลาคิด 3 บรรทัด

...

...

...

มานั่งคิดดูดีๆ ได้ว่า C++  มัน evaluate boolean condition ข้างบนแบบนี้ครับ

จาก a == b == c เป็น (a == b) == c

กลายเป็นว่า ถ้า a == b อยู่แล้ว จะกลายเป็น true == c แทน!

ตายล่ะ .. แล้วทำไม C++ ไม่แจ้งเตือนเลยล่ะ

ก็เพราะว่า C++ มันใช้พวกจำนวนเต็มแทน condition คือ 0 แทน false นอกนั้นแทน true

แต่ถ้าเป็นภาษาพวก Managed Langauge เช่น C# หรือ Java จะไม่ยอมให้ประโยคข้างบน Compile ผ่าน เพราะซ้ายกับขวามันคนละ Type กัน

เป็นเช่นนี้แล ..

Tags:

Comments

1.
m3rlinez m3rlinez says:

มานั่งคิดๆดูอีกที เรื่องนี้มันนู้บพอๆกับ if(a > b > c) เลยนี่หว่า 55+

2.
กร กร says:

นู้บจริงๆด้วย

Add comment


(Will show your Gravatar icon)

biuquote
  • Comment
  • Preview
Loading