2013-10-11 2 views

ответ

10

21,5 Числовые преобразования

unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);

эффекты: ... называйте [s] strtoul(str.c_str(), ptr, base) ... возвращает преобразованный результат, если таковые имеются.

Throws: ... out_of_range, если преобразованное значение находится за пределами диапазона представляемых значений для типа возврата.

"Конвертированное значение" здесь - значение, возвращаемое strtoul. Который, конечно, относится к типу unsigned long и поэтому не может находиться за пределами диапазона представляемых значений для возвращаемого типа stoul, который также является unsigned long.

Насколько я могу судить, только stoi может бросить out_of_range, потому что она возвращает int, но использует strtol, который возвращает long.

Кроме того, согласно стандарту C, указанному strtoul, требуется принять строку "-4" и вернуть значение, равное -(unsigned long)4. Почему это указано именно так, я не знаю.

+3

спасибо, это раздражает – Kal

Смежные вопросы