【发布时间】:2019-06-10 13:33:33
【问题描述】:
boost::lexical_cast 的输出以 bool 变量作为输入应为 0 或 1 值。但我得到了不同的价值。
这不是正常发生的事情。让我们看一下我写的示例代码:
#include <string>
#include <boost/lexical_cast.hpp>
int main()
{
bool alfa = true; // Doesn't metter whether alfa is initialized at definition or not
char beta = 71; // An integer value. Different values don't make any differences.
memcpy(&alfa, &beta, sizeof(alfa));
printf("%s\n", boost::lexical_cast<std::string>(alfa).c_str());
}
从这段代码中,我得到了"w"(w 的 ASCII 代码为 71)作为输出!但我希望它是 0 或 1 值。
问题只是bool 变量将转换 的值。给定示例中的 bool 变量已被视为 true。
导致问题的原因是想象我想转换回转换后的值。这就是它抛出异常的地方,因为例如“w”字符不能转换为bool。但如果输出为0 或1,则可以重新转换。
std::string converted_value = boost::lexical_cast<std::string>(alfa);
bool reconverted_value = boost::lexical_cast<bool>(converted_value ); // In this line, boost::bad_lexical_cast will be thrown
我想知道输出是否正确或者这是boost::lexical_cast 中的错误?
当我尝试做同样的事情并将变量转换为int 时,我遇到了boost::bad_lexical_cast 异常。
我的增强版本:1.58
【问题讨论】:
-
因为我的转发率低,我不能使用
boostlexical_cast作为标签! -
How can bool variable be not equal to both True and False? 的可能重复项。所以基本上问题是当你覆盖
bool值时未定义的行为