【发布时间】:2013-07-29 05:28:21
【问题描述】:
您能否提出至少一种两者之间存在重大差异的场景
union {
T var_1;
U var_2;
}
和
var_2 = reinterpret_cast<U> (var_1)
?
我想得越多,它们对我来说就越像同一件事,至少从实际的角度来看是这样。
我发现的一个区别是,虽然联合大小在大小方面是最大的数据类型,但本文中描述的 reinterpret_cast 可能会导致截断,因此普通的旧 C 风格联合更加安全比更新的 C++ 转换。
你能概括一下这两者之间的区别吗?
【问题讨论】:
-
据我所知,在 C 中使用
unions 进行类型双关是安全的——我不确定 C++,也许不是,然后你必须使用类型转换。 -
@H2CO3 我不知道(老实说不关心)使用联合是否安全,但 reinterpret_cast 严格来说并不安全。
-
@user2485710 因为 1) 谁需要这个;和 2)
memcpy对此非常有效,无需挑选标准的狡猾解释来使其工作。 -
@R.MartinhoFernandes:回答你的问题,“谁需要这个,”我愿意。
-
@user2485710:
sizeof以字节为单位工作,因为所有对象大小都是字节的倍数。故事结局。现在请你停止这种毫无意义的争论。
标签: c++ unions reinterpret-cast