在结构体内部访问操作符

3
我想在结构体内部访问一个运算符,这是可能的吗?
struct st{
    float vd;
    float val(){
      return this[3]; //this dont work, is there a some way?
    }
    float operator[](size_t idx){
        return  vd*idx;
    }
};

this[3] 无法工作的原因是因为它是一个指针,所以操作符没有被调用,但代码与所有指针一样工作(this + 3),它返回一个指向虚构的“st结构”距离当前结构体3个“st”的指针。返回的“st”无法转换为浮点数。 - stefaanv
1个回答

8

this是指向对象的指针而不是对象本身。如果你想调用一个成员函数,可以直接调用该函数。

float val(){
  return operator[](3);
}

或者你可以取消引用this并在实际对象上调用[]
float val(){
  return (*this)[3];
}

由于this是一个指针,return this[3];被翻译为return (this + 3);,这意味着给我一个对象,它位于this + sizeof(st)*3的地址上,但这个对象是无效的,因为this不是一个数组。这是未定义行为,并且还会导致编译器错误,因为this[3]的类型是st,而你的函数应该返回一个float


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接