为什么这种转换不起作用?

时间:2009-08-07 17:49:32

标签: c++ std stringstream

以下是我的功能。我叫它

if(try_strtol(v, rhs))

和RHS =“15 \ t // @ comment”

bool try_strtol(int64_t &v, const string& s)
{
    try
    {
        std::stringstream ss(s);
        if ((ss >> v).fail() || !(ss >> std::ws).eof())
            throw std::bad_cast();
        return true;
    }
    catch(...)
    {
        return false;
    }
}

它返回false,i除了v = 15时为true。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

为什么期望(ss >> std::ws).eof()成立? rhs在15之后包含非空白字符,因此if条件将为true并且将抛出异常,这就是它返回false的原因。

答案 1 :(得分:3)

在std :: ws跳过标签后,你还没有完成任务。

答案 2 :(得分:2)

如果您希望它返回布尔值,请执行以下操作:

bool try_strtol(int64_t &v, const string& s)
{
    std::stringstream ss(s);
    return (ss >> v).fail() || !(ss >> std::ws).eof();
}

它失败了,因为这是一个糟糕的演员。你希望这个评论会被忽略吗?

答案 3 :(得分:0)

如果你期望流IO将C ++注释作为空格处理,那不是这种情况。