You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中同基本类型联合成员间隐式切换活跃成员是否为定义行为?

标准C++中联合内同基本类型成员隐式切换活跃成员是否属于定义行为?

我想了解在标准C++中,隐式切换联合中两个同基本类型成员的活跃成员是否属于定义行为。这里的“基本类型”指具有标准布局和平凡构造/析构函数的类型,如int、double、指针等。

例如,假设有如下联合:

union X
{
   int a;
   int b;
};

那么以下函数是否合法?

int f(int i)
{
    X x;
    x.a = i;
    return x.b;
};

我知道标准规定每个联合同一时间最多有一个非静态数据成员处于活跃状态,但存在一个例外:当联合内的一个或多个struct为标准布局且共享共同初始序列时。该例外似乎仅针对结构体,并未提及基本类型。我认为这一规则也应适用于基本类型(因为每个基本类型应与自身共享共同初始序列),但尚未找到相关依据。

相关问题参考

  • 有问题探讨了结构体与基本类型间隐式切换活跃成员的可行性(非两个基本类型的情况);
  • 类似地,有问题处理了一个结构体与一个基本类型的情况;
  • 有问题确认在C语言中完全可以执行我所描述的操作,但我想了解这是否适用于C++。

内容的提问来源于stack exchange,提问作者user2513351

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:03:15