Как получилось, что istringstream не может полностью считывать числовые литералы с помощью суффиксов?Получение длинного длинного с суффиксом из istringstream (C++)
#include <iostream>
#include <sstream>
using namespace std;
int main() {
long long x = 123ULL; // shows 123ULL is a valid long long literal
istringstream iss("123ULL");
iss >> x;
cout << "x is " << x << endl;
char extra;
iss >> extra;
cout << "remaining characters: ";
while(!iss.eof())
{
cout << extra;
iss >> extra;
}
cout << endl;
return 0;
}
Выход этого кода
x is 123
remaining characters: ULL
Является ли это поведение контролируется локали? Может ли кто-нибудь указать мне очистить документацию о том, какие строки приняты istringstream::operator>>(long long)
?
Спасибо. Не могли бы вы посоветовать стандартный способ интерпретации числовых литералов C++ в C++? – ricab
Вы должны написать тип оболочки ('struct CppInt' или так) и перегрузить' operator >> 'для него. Возможно, вам захочется добавить информацию о суффиксе в структуру, например. он может иметь 'bool unsigned' и' enum Type type' (для суффиксов 'L' и' LL'), если ваша программа позаботится об этом. Но если вы разбираете то, что имеет суффиксные целые литералы, потоки, вероятно, являются неправильным способом разобрать это вообще; вы должны заглянуть в генераторы синтаксического анализатора, такие как Boost.Spirit. –