在下面的例子中:
boost::variant<double, std::string, bool> testString("this string");
std::string s1 = boost::get<std::string>(testString);
我们将失败并出现运行时异常:
运行时检查失败#0 - ESP的值未在函数调用中正确保存。这通常是调用使用一个调用约定声明的函数的结果,函数指针使用不同的调用约定声明。
经过调查后,变体的which
值:
std::cout << testString.which() << "\n";
它是2
的值,因此在施工期间它与bool明显匹配。这可以通过以下方式得到进一步证实:
boost::variant<double, std::string> testString("this string"); // bool is removed
为什么提升变体与"this string"
构造中的bool
匹配而不是字符串?