在没有重载的情况下,在c ++中这个[i]的含义是什么

时间:2014-10-26 14:47:58

标签: c++

这是来自WebKit的代码:

class ExecState : public Register 
{
 JSValue calleeAsValue() const { return this[JSStack::Callee].jsValue(); } 
 ... 
}

JSStack::CalleeconstOperator[]未在ExecStateRegister中重载,

那么this[JSStack::Callee]的c ++中的语法是什么?

1 个答案:

答案 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}}