84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
在webkit中看到一段代码:class ExecState : public Register { JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); } ... } 其中JSStack::Callee是常量,不管是ExecState还是Register都没有对operator[]进行重载,所以想不明白this[JSStack::Callee]这样的用法是什么意思?
class ExecState : public Register { JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); } ... }
这里跟operator[]的重载是没有关系的,因为this是指向自己的指针,而*this才是一个ExecState实例。
operator[]
this
*this
ExecState
那么问题就是如何从C语言的层面进行理解。this[JSStack::Callee]其实是*(this + JSStack::Callee)。虽然我没有了解过webkit的代码,但我猜测calleeAsValue()的调用条件是这个实例在一个数组中(或许是一个用数组实现的栈?),这样那句代码才有意义。
this[JSStack::Callee]
*(this + JSStack::Callee)
calleeAsValue()
这里跟
operator[]
的重载是没有关系的,因为this
是指向自己的指针,而*this
才是一个ExecState
实例。那么问题就是如何从C语言的层面进行理解。
this[JSStack::Callee]
其实是*(this + JSStack::Callee)
。虽然我没有了解过webkit的代码,但我猜测calleeAsValue()
的调用条件是这个实例在一个数组中(或许是一个用数组实现的栈?),这样那句代码才有意义。