Box2D 矢量 () 运算符
Box2D vector () operator
我正在阅读Box2D源代码。b2Vec2
有()
运算符超载,但我不明白它应该做什么。我阅读了这种方法的手册和参考资料,但仍然不明白Read from an indexed element
和write to an indexed element
的含义,并且两种方法具有相同的正文return (&x)[i]
。这是什么意思和作用?
多亏了之前的评论(但由于某种原因它被删除了),我得到了一个想法并对其进行了测试,事实证明这将允许我分别使用索引 0 和 1 访问和写入 x 和 y。
例如:
#include <iostream>
using namespace std;
class clazz {
public:
float x, y;
clazz(float x_, float y_) : x(x_), y(y_) {}
float operator () (int i) const {
return (&x)[i];
}
float& operator () (int i) {
return (&x)[i];
}
};
int main() {
clazz f (3, 4);
cout << "f: x = " << f(0) << " y = " << f(1) << endl; // printed => f: x = 3 y = 4
f(0) = 6;
f(1) = 6;
cout << "f: x = " << f(0) << " y = " << f(1) << endl; // printed => f: x = 6 y = 6
return 0;
}
正如你发现的那样,它是向量类中各个元素的访问器函数。有两个函数的原因是 const 函数需要访问元素的值而无需修改它。请注意,您也可以在此处返回 const 引用,但这在您的情况下不是必需的,因为它在浮点数上运行。
希望有断言来确保代码不会超出范围,因为这很容易做到,尤其是当您使用像示例中这样的有符号变量时。
相关文章:
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 矢量擦除方法是否需要类才能具有 = 运算符?
- 标准::矢量的通用运算符>>
- 用于 3D 矢量的高效除法运算符
- C++ 使用矢量迭代器时的运算符优先级
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 运算符<<矢量重载
- 使用指针和矢量时没有匹配"*"错误的运算符
- 擦除矢量中的对象时出错.如何将移动作业运算符添加到我的类中
- 运算符重载<<,打印对象矢量时遇到问题
- 重载的矢量运算符导致性能大幅降低
- 当c 中的矢量容器过载[]运算符时,我对未定义的索引返回什么
- 插入运算符无法使用矢量,我不知道为什么
- 矢量未正确擦除内容(复制分配运算符的量运行直到崩溃 [BEX])
- C++ 矢量查找() 重载运算符 - 错误
- 为什么默认情况下使用 [ ] 运算符访问超出范围的矢量元素时,C++检测?
- 重载+/-运算符以添加/减去矢量
- Box2D 矢量 () 运算符
- C++ 矢量模板运算符 []
- 自制矢量模板运算符 [] 错误