C 中的匿名结构:为什么不存在?
C 通过匿名联合等语法增强功能扩展了 C 的功能。然而,匿名结构(扩展这种语法便利性的功能)在标准中明显缺失。这个决定背后的原因是什么?
与 C 中支持的匿名联合不同,C 不提供匿名结构。因此,C 支持匿名联合以实现兼容性,但由于缺乏这种兼容性而省略了匿名结构。
此外,使用匿名结构来表示一组可通过不同名称访问的元素(例如,. v[i], .x, .y, .z) 可能会在 C 中引入未定义的行为。 C 禁止写入一个联合成员 (.v[1]) 并随后从另一个成员 (.y) 读取。虽然某些代码可能遵循这种做法,但它仍然定义不明确。
C 为此类场景提供了替代解决方案,如以下结构体所示:
struct vector3 { float v[3]; float &operator[](int i) { return v[i]; } float &x() { return v[0]; } float &y() { return v[1]; } float &z() { return v[2]; } };
总而言之,C 的缺乏匿名结构源于不必要的兼容性考虑以及实现类似效果的替代机制的可用性,确保语言中定义良好的行为。
以上是为什么 C 不支持匿名结构?的详细内容。更多信息请关注PHP中文网其他相关文章!