这是Qt的QVector3D
实现的一部分:
class QVector3D
{
public:
// lot of additional functions
float &operator[](int i);
private:
float xp, yp, zp;
};
inline float &QVector3D::operator[](int i)
{
Q_ASSERT(uint(i) < 3u);
return *(&xp + i);
}
我非常确定此operator[]
实现具有UB,因为它向指针添加了一个整数,而该指针实际上并不指向数组。
我对吗,这是UB吗?
(我只是想仔细检查一下。Qt被广泛使用,开发了很长时间。奇怪的是,它的UB非常小)