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 で true を除き、false を返します。これを修正するにはどうすればよいですか?

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 に答える