Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hiệu suất i++ so với ++i trong C++

Có sự khác biệt về ngữ nghĩa giữa tiền tố (++i) và hậu tố (i++), nhưng hiệu suất thực tế gần như bằng nhau trên compiler hiện đại với tối ưu hóa bật (-O2, -O3).

Khác biệt ngữ nghĩa

  • ++i (prefix): Tăng i trước, trả về giá trị mới của i.
  • i++ (postfix): Trả về giá trị cũ của i, sau đó tăng i.

Ví dụ minh họa

#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 << endl; // 5, 3, 5
    return 0;
}

Hiệu suất

  • Kiểubuiltin (int, pointer): Không có chênh lệch. Compiler tối ưu hóa hoàn toàn.
  • Class có overload operator++: ++i trả về reference, i++ phải tạo bản sao tạm thời (copy) → prefix nhanh hơn. Quy tắc: Ưu tiên ++i cho iterator, object phức tạp.

Kết luận

Với int, con trỏ: không khác biệt. Với iterator, class: dùng ++i (prefix) để tránh tạo bản sao không cần thiết. Thói quen tốt: luôn dùng ++i trừ khi cần giá trị cũ.