Nun, this
ist ein Zeiger auf ExecState
und die Verwendung des Subscript-Operators mit einem Zeiger bewirkt, dass es sich verhält, als wäre es ein Array. Das heißt, der Ausdruck this[JSStack::Callee]
greift auf ein Objekt zu, das JSStack::Callee
Elemente von this
entfernt ist. Dies kann natürlich nur funktionieren, wenn das Element Mitglied eines Arrays von ExecState
Objekten ist.
Unten finden Sie eine kurze eigenständige Demo zur Verwendung dieser "Funktion". Im Allgemeinen würde ich empfehlen, es zu verwenden, aber es kann sehr spezifische Bedürfnisse geben, wo es bekannt ist, dass ein Typ innerhalb eines Arrays verwendet wird und die Zugriffe machbar sind. Wenn der Typ beispielsweise lokal definiert ist, könnten alle bekannten Verwendungen bekannt sein (ich würde jedoch einen Kommentar hinzufügen, der diese Annahme angibt).
#include <iostream>
class foo {
int d_value;
public:
foo(int i): d_value(i) {}
int get(int i) const { return this[i].d_value; }
};
template <typename T, int Size>
int size(T(&)[Size]) { return Size; }
int main()
{
foo f[] = { 9, 1, 8, 2, 7, 3, 6, 4, 5 };
for (int i=0; i < size(f) - 2; ++i) {
std::cout << "f[" << i << "].get(2)=" << f[i].get(2) << '\n';
}
}
Haben Sie versucht, es aus dem Code zu entfernen und zu sehen, was passiert? – Chantola
Uhh das ist keine gute Sache. Wenn 'JSStack :: Callee' nicht zu 0 ausgewertet wird, haben Sie große Probleme. Wenn ja, hast du wirklich immer noch Probleme. – chris
Versuchen Sie das nicht zu Hause? –