1

下面是我的功能。我称之为

if(try_strtol(v, rhs))

和 RHS = "15\t// 评论"

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;
    }
}

它返回假,我除了 v=15 的真。我该如何解决?

4

4 回答 4

4

为什么你期望(ss >> std::ws).eof()是真的?rhs 包含 15 之后的非空白字符,所以 if 条件为 true 会抛出异常,这就是它返回 false 的原因。

于 2009-08-07T17:57:49.393 回答
3

在 std::ws 跳过选项卡后,您还没有处于 eof 状态。

于 2009-08-07T17:58:16.943 回答
2

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

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

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

于 2009-08-07T18:22:19.343 回答
0

如果您期望流 IO 将 C++ 注释作为空格处理,那么情况并非如此。

于 2009-08-07T19:36:49.053 回答