Ho bisogno di sapere se, quando viene chiamato un metodo di classe in C++, il puntatore implicito 'questo' è il primo argomento, o l'ultimo. cioè: se è stato messo in pila prima o dopo.Il C++ implicito questo, e esattamente come viene inserito nello stack
In altre parole, mi sto chiedendo se un metodo di classe, chiamato, è preso dal compilatore di essere:
int foo::bar(foo *const this, int arg1, int arg2);
//or:
int foo::bar(int arg1, int arg2, foo *const this);
Per estensione, pertanto, e ancora più importante, che sarebbe anche rispondere se G ++ sarebbe spingere il puntatore per ultimo o per primo, rispettivamente. Ho interrogato google, ma non ho trovato molto.
E come nota a margine, quando vengono chiamate le funzioni C++, fanno la stessa cosa delle funzioni C? Ad esempio:
push ebp
mov ebp, esp
Tutto sommato: un metodo di classe si chiamerebbe simile a questo?
; 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
Grazie, e molto obbligato.
EDIT: per chiarire le cose, sto usando GCC/G ++ 4.3
Sarebbe stato più veloce per voi non porre questa domanda e osservare l'assembly generato dal compilatore. Hanno tutti gli switch per generare il codice assembly come testo. –