是否存在必须使用union并且不能使用boost :: variant的用例?
更具体地说: 工会可以解决哪些问题并且提升::变体可以&#t;
正如C ++标准委员会建议using variant instead of union 。
答案 0 :(得分:2)
虽然工会在技术上允许变体不会有的东西,但实际上这些东西都是未定义的行为。
请注意,这比实现定义要强很多:您不能依赖于同一个编译器两次执行相同的操作,或者编译器的未来版本执行相同的操作。
在便携性方面,没有,因为UB意味着“任何事情都可能发生”。
某些编译器将视为的实现定义的事实实际上只是标准C ++范围内的旁注
变体旨在使歧视联盟(tuple(union, discriminant)
)安全,有点像array_view旨在使tuple(pointer, size)
安全。