gpt4 book ai didi

C++ union 、结构、成员类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:10 24 4
gpt4 key购买 nike

如果我有一个类:

class Odp
{
int i;
int b;
union
{
long f;
struct
{
WCHAR* pwszFoo;
HRESULT hr;
};
};

}

union 意味着,在列出的所有值中,它一次只能采用其中一个值?这在访问这些变量方面是如何工作的?我如何直接访问 hr?如果我设置 hr,如果我尝试访问 f 会发生什么情况?

最佳答案

这是 C++ 标准中一个非常令人担忧的领域 - 基本上是一个 union 实例,根据标准,在任何时候都只能将其视为包含一个“事件”成员 - 最后一个写入它的成员。所以:

union U {
int a;
char c;
};

然后:

U u;
u.a = 1;
int n = u.a;
u.c = 2;
char c = u.c;

没问题,但是:

U u;
u.a = 1;
char c = u.c;

不是。但是,有大量现有代码表明两者都可以。并且在任何情况下都不会因“无效”访问而抛出异常。 C++ 语言非常(!)谨慎地使用异常。

基本上,如果您发现自己在 C++ 代码中使用 union 来处理除 C 库以外的任何东西,那就有问题了。

关于C++ union 、结构、成员类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3071806/

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