Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для SoBadDay
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269

Каст перед входом в тело функции

20.01.2021, 07:56. Показов 1499. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Представим, что есть конструктор MyInt foo (string input). Можно ли каким-либо образом закастить выражение Myint x = 123+456 так, чтобы пользователю не приходилось делать это явно Mying x = (to_string(123+456))? Также стоит учитывать, что формат введённого числа может не входить в диапазон INT_MAX и INT_MIN.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2021, 07:56
Ответы с готовыми решениями:

Окно перед входом в Skype
Ежедневно перед первым входом в Skype 5.10.66.166 появляется, на долю секунды, окно. Что это и как убрать? Программу удалял и начисто...

Перезагрузка перед входом в систему
комп перезагружается в конце загрузки, после экрана "приветствие", один раз показал на мгновенье пустой рабочний стол, без кнопки старт и...

Сообщение перед входом в систему
Всем привет :) Исходные данные: MS Windows XP Pro SP2 Необходимо: после того как пользователь ввел свои учетные данные...

13
 Аватар для Nishen
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,816
20.01.2021, 07:58
Перегрузить функцию, принимающую параметр типа int, а уже внутри функции вызывать to_string.
0
 Аватар для SoBadDay
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
20.01.2021, 08:08  [ТС]
Цитата Сообщение от Nishen Посмотреть сообщение
Перегрузить функцию, принимающую параметр типа int
На момент перехвата int может хранить поломанное значение (если попытаться уместить в нём число, заведомо больше допустимого)
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
20.01.2021, 08:13
Цитата Сообщение от SoBadDay Посмотреть сообщение
На момент перехвата int может хранить поломанное значение (если попытаться уместить в нём число, заведомо больше допустимого)
В вашем коде с явным преобразованием эта проблема тоже никак не решается.
0
 Аватар для SoBadDay
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
20.01.2021, 08:19  [ТС]
DrOffset, как же тогда решать проблему, когда пользователь хочет создать MyInt x = pow(2,164)?
C++
1
2
3
4
class MyInt
{
string val //Представим, что здесь будет храниться введённое пользователем значение
}
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
20.01.2021, 08:22
SoBadDay, длинная арифметика нужна похоже
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
20.01.2021, 08:28
Цитата Сообщение от SoBadDay Посмотреть сообщение
как же тогда решать проблему,
Пользователь изначально вводит строку, а в процессе преобразования строки к числу уже можно понять, помещается ли оно в int или нет.
Проверку на допустимость вхождения в диапазон делают все стандартные функции преобразования.
0
 Аватар для SoBadDay
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
20.01.2021, 08:30  [ТС]
DrOffset,
Цитата Сообщение от DrOffset Посмотреть сообщение
Пользователь изначально вводит строку
В этом и был вопрос темы.
Цитата Сообщение от SoBadDay Посмотреть сообщение
Можно ли каким-либо образом закастить выражение Myint x = 123+456 так, чтобы пользователю не приходилось делать это явно Mying x = (to_string(123+456))?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
20.01.2021, 08:38
Цитата Сообщение от SoBadDay Посмотреть сообщение
В этом и был вопрос темы.
Ничего не понятно.

Вопрос в том, что условные 123 плюс условные 456 могут дать переполнение по int? Тогда преобразованием к строке (to_string) вы эту проблему не решите. Хоть явно, хоть неявно. Туда (в функцию преобразования) уже будет попадать неверное значение. Проверять на переполнение надо до выполнения сложения.

А выше я говорил о том, что если у вас уже есть заведомо большее, чем int, число в виде строки, то в процессе преобразования (std::stoi, например) можно понять, вмещается оно или нет.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12944 / 6811 / 1821
Регистрация: 18.10.2014
Сообщений: 17,235
20.01.2021, 08:40
Цитата Сообщение от SoBadDay Посмотреть сообщение
На момент перехвата int может хранить поломанное значение (если попытаться уместить в нём число, заведомо больше допустимого)
Тогда уже поздно что-то пытаться исправлять.
0
Гвоздь Задиров
 Аватар для Folian
1719 / 1118 / 337
Регистрация: 25.01.2019
Сообщений: 2,946
20.01.2021, 09:12
Цитата Сообщение от SoBadDay Посмотреть сообщение
На момент перехвата int может хранить поломанное значение (если попытаться уместить в нём число, заведомо больше допустимого)
А каким образом это обрабатываться-то будет?
Ну, допустим, например

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
typedef long long ll;
typedef int MyInt; //для примера
 
ll int_max = 2147483647;
 
MyInt foo(long long num)
{
    if(num > int_max)
    {
        std::cout << "OMG!";
        return 0;   
    }
    
    return num;
}
 
int main()
{
    int x = 2e+9;
    int y = 2e+9;
    
    int z = foo( static_cast<ll>(x) + static_cast<ll>(y) );
    
    std::cout << z;
только дальше что? Либо и работать дальше через ll, если оно само на себя не закручивается, следя чтобы не больше инта сувалось, но это тоже белиберда ж получается.
0
 Аватар для SoBadDay
67 / 42 / 30
Регистрация: 26.03.2019
Сообщений: 269
20.01.2021, 09:43  [ТС]
Цитата Сообщение от Folian Посмотреть сообщение
но это тоже белиберда ж получается
Получается, если рассматривать с точки зрения функционала. А если с точки зрения удобства использования - нет.
MyInt в данном случае это класс, способный хранить в себе любое целое число. В целях сделать удобнее его использование, я стал думать, как реализовать инициализацию объекта таким способом MyInt x = INT1 * INT2, где INT1 и INT2 сами по себе входят в зону допустимых значений long long, а вот их произведение - нет

Добавлено через 3 минуты
Я в курсе о том, что можно MyInt x = to_string(INT1 * INT2), но если есть способ сделать это так, как я описывал выше, это было бы более читаемо и понятно в использовании. Всё-таки обращение к MyInt подразумевает "прокаченное" обращение к int
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12944 / 6811 / 1821
Регистрация: 18.10.2014
Сообщений: 17,235
20.01.2021, 10:21
Лучший ответ Сообщение было отмечено SoBadDay как решение

Решение

Цитата Сообщение от SoBadDay Посмотреть сообщение
В целях сделать удобнее его использование, я стал думать, как реализовать инициализацию объекта таким способом MyInt x = INT1 * INT2, где INT1 и INT2 сами по себе входят в зону допустимых значений long long, а вот их произведение - нет
Никак. С и С++ - языки с контекстно-независимой трактовкой выражений в statement или подвыражений в выражении. Поэтому что бы вы ни писали снаружи, INT1 * INT2 всегда будет произведением двух long long, вычисляемым в домене типа long long.
1
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
20.01.2021, 10:29
SoBadDay, если делать по-серьезному, я был создал класс unlimited_integer, который может вмещать число с любым количеством цифр (длинная арифметика) и сделал бы параметром функции его. Несложно предусмотреть каст любых стандартных целых типов в unlimited_integer.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.01.2021, 10:29
Помогаю со студенческими работами здесь

Смещение сигнала перед входом АЦП
Входной сигнал +-0.3 В У АЦП диапазон от 0 до 3,5. Подскажите, пожалуйста, как сместить входной - чтобы было от 0 до 0,6В. Спасибо

Форма авторизации перед входом на сайт
Есть сайт на wordpress, есть форум (IPB) в корне этого сайта. Нужно чтоб на этот форум мог попасть только: 1) либо авторизированный юзер...

Заглушка с подтверждением возраста перед входом на сайт
Доброго времени суток! Прошу помощи!!! Мне нужно поставить заглушку на сайт. Тематика : Есть ли тебе 18 лет. Если Да - то проходи, если нет...

Загрузка Windows 7! Чёрный экран перед входом в систему, дальше не загружается!!!
сегодня вкл комп и выбивает перед входом в систему &quot;востановление системы&quot; Потом комп перезагрузился сам и загружается до входа в систему,...

Перегрузка функции через макрос, предупреждение в _Generic на каст перекрестно
Есть код, в котором происходит перегрузка функции через макрос. Компилятор выдаёт предупреждение на каст переменных, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru