84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
在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()
的呼叫條件是這個實例在一個陣列中(或許是一個用陣列實現的堆疊?),這樣那句程式碼才有意義。