c++ - this[i] 在没有重载的情况下在 C++ 中是什么意思

标签 c++

这是来自 WebKit 的代码:

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

JSStack::CalleeconstOperator[] 没有在 ExecState 中重载注册,

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

最佳答案

好吧,this 是一个指向 ExecState 的指针,使用带有指针的下标运算符可以使其表现得就像一个数组。也就是说,表达式 this[JSStack::Callee] 访问一个对象,该对象距离 thisJSStack::Callee 个元素。当然,这只有在元素是 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';
    }
}

关于c++ - this[i] 在没有重载的情况下在 C++ 中是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574228/

相关文章:

c++ - 从输入读取字符串直到 EOF

c++ - Code::Blocks 调试问题

c++ - 函数没有返回所需的字符串

c++ - 使用 socket recv 函数读取 stdin 上的流

C++ STM32用户定义类构造函数问题

c++ - GDB bt 错误 : "Not enough registers or memory available to unwind further"

.net - 是否可以在 C++ .NET 中使用匿名函数?

c++ - VC++ 中是否有 boost::shared_ptr 的本地/可靠替代方案?

c++ - 在 VC++ 中执行一个进程并返回它的标准输出

c++指定分隔符以从文本文件中读取单词