裸机union无法告诉您哪个是活动元素。你必须自己跟踪。
由于 C++17std::variant是“现代的union”。它有一个index()方法可以告诉您哪个是活动索引。来自cppreference 的示例:
Run Code Online (Sandbox Code Playgroud)#include <variant> #include <string> #include <iostream> int main() { std::variant<int, std::string> v = "abc"; std::cout << "v.index = " << v.index() << '\n'; v = {}; std::cout << "v.index = " << v.index() << '\n'; }可能的输出:
Run Code Online (Sandbox Code Playgroud)v.index = 1 v.index = 0