推荐使用boost :: variant over union

时间:2015-11-24 10:04:44

标签: c++ boost unions

是否存在必须使用union并且不能使用boost :: variant的用例?

更具体地说: 工会可以解决哪些问题并且提升::变体可以&#t;

正如C ++标准委员会建议using variant instead of union

1 个答案:

答案 0 :(得分:2)

虽然工会在技术上允许变体不会有的东西,但实际上这些东西都是未定义的行为。

请注意,这比实现定义要强很多:您不能依赖于同一个编译器两次执行相同的操作,或者编译器的未来版本执行相同的操作。

在便携性方面,没有,因为UB意味着“任何事情都可能发生”。

  

某些编译器视为的实现定义的事实实际上只是标准C ++范围内的旁注

变体旨在使歧视联盟tuple(union, discriminant))安全,有点像array_view旨在使tuple(pointer, size)安全。