阅读此FAQ后,我选择使用istringstream将输入字符串转换为数值。
我的代码如下所示:
<template T>
T Operand<T>::getValue(const std::string &s)
{
T _value;
std::istringstream v_ss(s);
v_ss >> _value;
return _value;
}
当T为int,short,long或float时,没问题我得到正确的值。 但是当T为int8_t时,此代码不起作用。
例如,如果我的输入字符串是“10”,则getValue返回一个值为49的int8_t。
在ASCII表格中有49 =='1',我想&gt;&gt; operator只读取输入字符串中的第一个char并停止。
在常见问题解答中是否有一些我不理解的技巧?
答案 0 :(得分:2)
问题是int8_t
已实施为char
。
输入流的实现如下:
char x;
std::string inputString = "abc";
std::istringstream is(inputString);
is >> x;
std::cout << x;
结果是'a',因为对于char
,输入流是char char char。
要解决此问题,请为模板方法提供专门的实现。并阅读int
,然后检查边界并将值转换为int8_t
。