-2

この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' を使用すると、 >> 演算子は入力文字列の最初の文字を読み取って停止したと思います。

FAQでわからない裏技とかありますか?

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 に対して char と読み取られるためです。

この問題を解決するには、テンプレート メソッドに特化した実装を提供します。a に読み込みint、境界をチェックして値を a に変換しますint8_t

于 2014-03-02T12:46:43.770 に答える