以下是我的功能。我叫它
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。我该如何解决这个问题?
答案 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 ++注释作为空格处理,那不是这种情况。