-2

阅读此常见问题解答后,我选择使用 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 会返回一个 int8_t 值等于 49。

在 ASCII 表中使用 49 == '1' 时,我猜 >> 运算符只是读取输入字符串中的第一个字符并停止。

常见问题解答中是否有技巧或我不明白的东西?

4

1 回答 1

2

问题int8_t实现为char.

输入流的实现是这样工作的:

char x;
std::string inputString = "abc";
std::istringstream is(inputString);

is >> x;
std::cout << x;

结果是 'a',因为对于char输入流是 char for char 读取的。

要解决此问题,请为您的模板方法提供专门的实现。并读入 a int,然后检查边界并将值转换为 a int8_t

于 2014-03-02T12:46:43.770 回答