4

这个简短的 C++ 程序的行为让我感到困惑:

#include <cassert>
#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>

int main(void) {
    signed char c = -2;
    assert(c == -2);
    c = boost::lexical_cast<signed char>(std::string("-2"));
    std::cout << c << "\n";
}

使用g++ 5.2.1and boost-1.58.0,我得到:

在抛出 'boost::exception_detail::clone_impl >' 的实例后调用终止 what(): bad lexical cast: 源类型值不能被解释为目标

为什么 Boost 不能从字符串“-2”强制转换signed char为该值-2可以由这种类型表示?

4

1 回答 1

3

解决方案是使用Boost:

#include <boost/lexical_cast.hpp>
#include <boost/numeric/conversion/cast.hpp>
int tmp = boost::lexical_cast<int>(std::string("-2"));
char c = boost::numeric_cast<signed char>(tmp);
于 2015-12-20T13:09:09.513 回答