Tôi cần biết liệu khi một phương thức lớp trong C++ được gọi, thì con trỏ 'this' ẩn này là đối số đầu tiên, hoặc đối số cuối cùng. ví dụ: cho dù nó được đẩy lên ngăn xếp trước hay cuối cùng.C++ ngụ ý điều này, và chính xác cách nó được đẩy lên ngăn xếp
Nói cách khác, tôi đang hỏi liệu một phương pháp học, được gọi là, được thực hiện bởi trình biên dịch là:
int foo::bar(foo *const this, int arg1, int arg2);
//or:
int foo::bar(int arg1, int arg2, foo *const this);
Bằng cách mở rộng do đó, và quan trọng hơn, đó cũng sẽ trả lời cho dù G ++ sẽ đẩy con trỏ này lần cuối hoặc đầu tiên, tương ứng. Tôi thẩm vấn google, nhưng tôi không tìm thấy nhiều.
Và như một lưu ý phụ, khi các hàm C++ được gọi, chúng có thực hiện tương tự như các hàm C không? tức là:
push ebp
mov ebp, esp
Tất cả trong tất cả: một phương thức lớp học có được gọi là như thế này không?
; About to call foo::bar.
push dword 0xDEADBEEF
push dword 0x2BADBABE
push dword 0x2454ABCD ; This one is the this ptr for the example.
; this code example would match up if the this ptr is the first argument.
call _ZN3foo3barEpjj
Cảm ơn và có nhiều nghĩa vụ.
EDIT: để làm rõ mọi thứ, tôi đang sử dụng GCC/G ++ 4.3
Sẽ nhanh hơn nếu bạn không hỏi câu hỏi này và chỉ xem xét lắp ráp được tạo bởi trình biên dịch của bạn. Tất cả đều có thiết bị chuyển mạch để xuất mã lắp ráp dưới dạng văn bản. –