gpt4 book ai didi

c++ - 为什么C++不允许匿名结构?

转载 作者:行者123 更新时间:2023-12-01 14:58:29 35 4
gpt4 key购买 nike

一些C++编译器允许匿名联合和结构作为标准C++的扩展。这是一种语法糖,偶尔会很有帮助。

有什么理由可以阻止它成为标准的一部分?有技术障碍吗?哲学的?还是只是不足以证明其合理性?

这是我正在谈论的示例:

struct vector3 {
union {
struct {
float x;
float y;
float z;
};
float v[3];
};
};

我的编译器会接受这一点,但是会警告 "nameless struct/union" is a non-standard extension to C++

最佳答案

正如其他人指出的那样,标准C++允许使用匿名联合,但不允许使用匿名结构。

这样做的原因是C支持匿名联合,但不支持匿名struct *,因此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]; }
};

* C11显然添加了匿名结构,因此将来对C++的修订可能会添加它们。

关于c++ - 为什么C++不允许匿名结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58833498/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com