by m3rLinEz
3. January 2009 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 กัน
เป็นเช่นนี้แล ..
7c5a68c8-a5c6-48e7-a2e5-60639a5f6b22|0|.0
Tags: c++ Category: Native