литералы — длинная длинна с суффиксом из istringstream (C ++)

Почему же 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)?

0

Решение

Да, это контролируется языком (через num_get facet), но ни одна локаль, о которой я когда-либо слышал, не поддерживает литералы языка C ++, и было бы неправильно настраивать это.

Потоки предназначены для ввода-вывода общего назначения, а целочисленные литеральные суффиксы C ++ очень специализированы.

Точное поведение по умолчанию num_get Фасет описан в стандарте C ++ 11 в разделе 22.4.2.1. Описание частично ссылается на strto* семейство функций из стандартной библиотеки C. Вы можете найти несколько сокращенную версию здесь:

http://en.cppreference.com/w/cpp/locale/num_get/get

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]