1

Тема: Використання stol для перетворення строки на число

Коли використовую stol для перетворення строки на число з маленькими числами (наприклад, "123"), усе працює добре.
Якщо брати надто велике число (наприклад, "9876543210"), то в результаті отримується геть інше число.
Розумію, що число виходить за діапазон допустимих значень для цілих 32-бітних чисел, але чому тоді не видає помилку?

2 Востаннє редагувалося koala (24.07.2024 17:42:44)

Re: Використання stol для перетворення строки на число

Який компілятор?
Також звертаю увагу, що поведінка stol змінилася у C++14 (але ви саме такої поведінки й очікуєте, як я розумію).

Подякували: leofun01, steamwater2

3

Re: Використання stol для перетворення строки на число

koala написав:

Який компілятор?
Також звертаю увагу, що поведінка stol змінилася у C++14 (але ви саме такої поведінки й очікуєте, як я розумію).

C++17

4

Re: Використання stol для перетворення строки на число

Teg Miles написав:

Розумію, що число виходить за діапазон допустимих значень для цілих 32-бітних чисел, але чому тоді не видає помилку?

Якщо перевiряти то потрiбно додатковий час та щей конвертацiя у ширший тип. Навiть якщо робити аналiз починаючи з строки, то можна було б заборонити надто довгi строки, але навiть якщо казату про, конкретно, скажiмо, int_32 ви маєте 10 десятинних знакiв та ще й знак як такий (+ чи -). Всього 11. Перевiрка теж займе час. Дл того ж С-строкова str_len бiжить вздовж усієї строки аж поки не зустрiне термiнатора. А той скаже їй Asta la vista, babby чи I'll be back (залежно вiд реалiзацiї). Жахiття.

5

Re: Використання stol для перетворення строки на число

У вас, пане, багата фантазія, але ще раз: стандарт якраз вимагає перевіряти. А перевірка на сучасних x86 практично безкоштовна (виконується паралельно з іншими операціями), особливо якщо врахувати, що для перетворення з десяткових чисел потрібне множення.