Tôi muốn đảm bảo rằng tôi hiểu được giá trị theo từng giá trị so với giá trị tham chiếu vượt qua. Đặc biệt, tôi đang xem các phiên bản tiền tố/postfix của toán tử tăng thêm ++
cho một đối tượng.Nhà điều hành tăng số tiền tố/Postfix
Chúng ta hãy giả sử chúng ta có lớp sau X
:
class X{
private:
int i;
public:
X(){i=0;}
X& operator ++(){ ++i; return *this; } //prefix increment
X operator ++ (int unused){ //postfix increment
X ret(*this);
i++;
return ret;
}
operator int(){ return i; } //int cast
};
Trước hết, tôi đã thực hiện các prefix/nhà khai thác tăng postfix đúng cách?
Thứ hai, hiệu quả của bộ nhớ là toán tử postfix, so với toán tử tiền tố? Cụ thể có bao nhiêu bản sao đối tượng X
được tạo khi mỗi phiên bản của toán tử được sử dụng?
Giải thích chính xác điều gì xảy ra với giá trị trả lại theo tham chiếu so với giá trị trả lại theo giá trị có thể giúp tôi hiểu.
Chỉnh sửa: Ví dụ, với đoạn mã sau ...
X a;
X b=a++;
... là a và b tại bí danh?
Không cần tăng thêm hậu tố 'i' trong toán tử postfix. Trong thực tế, tôi sẽ làm như [FredOverflow gợi ý] (http://stackoverflow.com/questions/3181211/3181359#3181359) và gọi phiên bản tiền tố. IMO thực sự là thành ngữ hơn là tái thực hiện tăng (mặc dù việc thực hiện là tầm thường ở đây). _Và loại bỏ nhà điều hành chuyển đổi tiềm ẩn đó._ Nó sẽ làm tổn thương bạn nếu không. (Lần thứ ba và lần cuối tôi viết một nhà điều hành chuyển đổi tiềm ẩn là vào năm 2001 và một hoặc hai năm sau, tôi phát hiện ra rằng nó gây ra các lỗi tinh vi và loại bỏ nó - giống như tất cả những lỗi trước đây. BTDTGTLS.) – sbi