小编use*_*994的帖子

在 C++ 中,将结构体的标量成员视为构成数组是否有效?

在查看Dear Imgui的代码时,我发现了以下代码(为了相关性进行了编辑):

struct ImVec2
{
    float x, y;
    float& operator[] (size_t idx) { return (&x)[idx]; }
};
Run Code Online (Sandbox Code Playgroud)

很明显,这在实践中是有效的,但是从 C++ 标准的角度来看,这段代码合法吗?如果没有,任何主要编译器(G++、MSVC、Clang)是否提供任何显式或隐式保证该代码将按预期工作?

c++ struct pointers strict-aliasing undefined-behavior

42
推荐指数
4
解决办法
3864
查看次数