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中文網其他相關文章!