Muszę wiedzieć, czy po wywołaniu metody klasy w C++, niejawny "ten" wskaźnik jest pierwszym lub ostatnim argumentem. tj. czy jest on najpierw lub na siłę popychany na stosie.C++ domyślnie to, i dokładnie jak to jest pchane na stosie
Innymi słowy, pytam, czy metoda klasy, nazywany jest podjęta przez kompilator jako:
int foo::bar(foo *const this, int arg1, int arg2);
//or:
int foo::bar(int arg1, int arg2, foo *const this);
Przez rozszerzenie zatem, a co ważniejsze, które również odpowiedzieć, czy g ++ byłoby najpierw naciśnij ten wskaźnik jako ostatni lub pierwszy. Przesłuchałem google, ale nie znalazłem zbyt wiele.
A jak na marginesie, gdy wywoływane są funkcje C++, czy robią to samo, co funkcje C? tj .:
push ebp
mov ebp, esp
Podsumowując: czy metoda klasy nazywa się tak?
; 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
Dzięki, i bardzo zobowiązany.
EDIT: wyjaśnienie rzeczy, używam GCC/G ++ 4.3
Byłoby szybciej, gdybyś nie zadawał tego pytania i po prostu patrzył na zestaw generowany przez Twój kompilator. Wszystkie mają przełączniki do wyjściowego kodu zespołu jako tekst. –