ตัวดำเนินการเพิ่ม (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;