这是来自WebKit的代码:
class ExecState : public Register
{
JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); }
...
}
JSStack::Callee
为const
,Operator[]
未在ExecState
或Register
中重载,
那么this[JSStack::Callee]
的c ++中的语法是什么?
答案 0 :(得分:5)
好吧,this
是一个指向ExecState
的指针,并且使用带有指针的下标运算符使其行为就好像它是一个数组一样。也就是说,表达式this[JSStack::Callee]
访问距离JSStack::Callee
this
元素ExecState
元素的对象。当然,只有当元素是#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';
}
}
个对象数组的成员时,这才有可能发挥作用。
以下是使用此“功能”的快速独立演示。一般来说,我建议不要使用它,但是可能存在非常特殊的需求,其中已知在数组中使用类型并且访问是可行的。例如,如果类型是在本地定义的,那么所有已知的用途都是已知的(虽然我会添加一条注释说明这种假设)。
{{1}}