考虑:
#include <variant>
#include <iostream>
int main()
{
double foo = 666.666;
std::variant<double, uint64_t> v = foo;
std::cout << std::get<uint64_t>(v) << std::endl;
return 0;
}
这会导致:
terminate called after throwing an instance of 'std::bad_variant_access'
what(): Unexpected index
Aborted (core dumped)
为什么?
我理解 std::variant
应该是 union
的替代品。但如果这种基础的东西都失败了,那还有什么用处呢?
union
不适合用于类型转换。如果读取不同于上次写入的 union 成员,则这种行为总是未定义的行为。 - Yksisarvinenuint64_t
,你为什么期望它能给你一个?我会翻译成:在 variant 中没有uint64_t
类型,你为何期待它会给你一个? - NathanOlivermemcpy
将double类型转换成uint64_t类型。 - NathanOliver