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

i++ และ ++i ใน C++ แตกต่างกันอย่างไร ด้านประสิทธิภาพไหม

มีความแตกต่างที่สำคัญระหว่างรูปแบบ postfix (i++) และ prefix (++i) ของออเปอเรเตอร์ ++

  • Prefix (++i): เพิ่มค่า i ก่อน แล้วคืนค่าใหม่ของ i เป็นผลลัพธ์ของ expression
  • Postfix (i++): คืนค่าเดิมของ i ก่อน แล้วค่อยเพิ่มค่า i

โค้ดตัวอย่าง

#include <iostream>
using namespace std;

int main() {
    int x = 3, y, z;
    y = x++; // y = 3, x = 4
    z = ++x; // x = 5, z = 5
    cout << x << ", " << y << ", " << z;
    return 0;
}

ผลลัพธ์

5, 3, 5

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

  1. เริ่มต้น x = 3
  2. y = x++: คืนค่าเก่า (3) ให้ y, แล้ว x = 4
  3. z = ++x: x = 5, คืนค่าใหม่ (5) ให้ z
  4. พิมพ์: x=5, y=3, z=5

ด้านประสิทธิภาพ (Performance)

  • Built-in types (int, pointer): ไม่มีความแตกต่าง คอมไพเลอร์ optimize ให้เหมือนกัน (ถ้าไม่ใช้ค่าผลลัพธ์)
  • User-defined types (class/iterator): ++i (prefix) เร็วกว่า เพราะไม่ต้องสร้าง temporary object สำหรับเก็บค่าเก่า i++ (postfix) ต้อง copy object เดิมไว้ก่อน แล้วค่อย increment object จริง
  • Best practice: ใช้ ++i (prefix) เป็นค่าเริ่มต้น สำหรับ iterator และ loop counter (for (auto it = v.begin(); it != v.end(); ++it)) ใช้ i++ เฉพาะเมื่อต้องการค่าเก่าจริงๆ

สรุป: สำหรับ int/pointer ไม่ต่างกัน สำหรับ class/iterator ให้ใช้ ++i (prefix) เพื่อประสิทธิภาพและเป็น best practice