Почему же istringstream не может полностью читать числовые литералы с суффиксами?
#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)
?
Да, это контролируется языком (через num_get
facet), но ни одна локаль, о которой я когда-либо слышал, не поддерживает литералы языка C ++, и было бы неправильно настраивать это.
Потоки предназначены для ввода-вывода общего назначения, а целочисленные литеральные суффиксы C ++ очень специализированы.
Точное поведение по умолчанию num_get
Фасет описан в стандарте C ++ 11 в разделе 22.4.2.1. Описание частично ссылается на strto*
семейство функций из стандартной библиотеки C. Вы можете найти несколько сокращенную версию здесь:
Других решений пока нет …