Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

แนวคิด Pre-increment และ Post-increment ใน C/C++

ตัวดำเนินการเพิ่ม (Increment) ใช้เพิ่มค่าขึ้น 1 ในขณะที่ตัวดำเนินการลด (Decrement) ลดค่าลง 1

Pre-increment (++i)

ก่อน นำค่าไปใช้งาน ค่าจะถูกเพิ่มขึ้น 1 ก่อน

Post-increment (i++)

หลัง นำค่าไปใช้งานแล้ว ค่าจึงจะถูกเพิ่มขึ้น 1

ไวยากรณ์

++variable_name;  // Pre-increment
variable_name++;  // Post-increment

ตัวอย่าง

#include <iostream>
using namespace std;

int main() {
    int i = 5;
    cout << "The pre-incremented value: " << i;
    while(++i < 10)
        cout << "\t" << i;
    cout << "\nThe post-incremented value: " << i;
    while(i++ < 15)
        cout << "\t" << i;
    return 0;
}

ผลลัพธ์

The pre-incremented value: 5	6	7	8	9
The post-incremented value: 10	11	12	13	14	15

คำอธิบายรายละเอียด

Pre-increment (++i)

  • ค่า i เพิ่มจาก 5 เป็น 6 ก่อน
  • ตรวจสอบ 6 < 10 เป็นจริง พิมพ์ 6
  • เพิ่มเป็น 7, 8, 9 ตามลำดับ
  • เมื่อ i กลายเป็น 10: ++i ทำให้เป็น 11, 11 < 10 เป็นเท็จ หยุดลูป
  • ค่า i ตอนจบลูป = 10

Post-increment (i++)

  • เริ่มที่ i = 10
  • ตรวจสอบ 10 < 15 (ใช้ค่าเดิม 10) เป็นจริง พิมพ์ 11 (เพราะ i++ คืนค่าเก่า แล้วเพิ่มเป็น 11)
  • ต่อมา 11, 12, 13, 14
  • เมื่อ i = 15: ตรวจสอบ 15 < 15 เป็นเท็จ หยุด (แต่ i เพิ่มเป็น 16 แล้ว)

ตารางเปรียบเทียบ

นิพจน์ค่าที่คืนค่าหลังประมวลผล
++iค่าใหม่ (หลังเพิ่ม)เพิ่มขึ้น 1
i++ค่าเก่า (ก่อนเพิ่ม)เพิ่มขึ้น 1
--iค่าใหม่ (หลังลด)ลดลง 1
i--ค่าเก่า (ก่อนลด)ลดลง 1

แนวทางปฏิบัติที่ดี (Best Practice)

  • ใช้ Pre-increment (++i) เมื่อไม่ต้องการค่าเก่า - มีประสิทธิภาพดีกว่าเล็กน้อย (ไม่ต้องสร้าง temporary copy)
  • ใช้ Post-increment (i++) ก็ต่อเมื่อต้องการค่าเก่าสำหรับนิพจน์นั้นๆ
  • สำหรับ iterator ใน C++ ควรใช้ ++it แทน it++
  • หลีกเลี่ยงการใช้ increment/decrement ซ้อนกันในนิพจน์เดียวกัน (Undefined Behavior) เช่น i = i++ + ++i;