-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Преобразовать тип size_t в тип int

Среда, 25 Ноября 2020 г. 18:06 + в цитатник
Qraizer:
Цитата a_n_y_a @
Существует ли такая возможность в С++?
Нет, если только конкретная среда разработки (Visual Studio, например, но я не проверял, как оно там) подобной фичи не предлагает.
В общем случае это проблематично, ибо пользователь вправе создавать собственные типы данных с нестандартными свойствами. Какие-нибудь длинные целые, например, или очень сильно расширенные вещественные. Та даже std::complex уже создаст проблемы. Можно попробовать самому научить этому компилятор, хотя бы для стандартных типов. Типа этого:
    template struct SafeCast
    {
    static T doIt(const U& val)
    {
    using common_type = std::common_type_t;
    constexpr common_type high= std::min(static_cast(std::numeric_limits::max()),
    static_cast(std::numeric_limits::max())),
    low = std::is_signed_v == std::is_signed_v ?
    std::max(static_cast(std::numeric_limits::min()),
    static_cast(std::numeric_limits::min()))
    : 0;
    if (val > high || val < low)
    throw std::runtime_error("Value exceeds allowed bounds.");
    return static_cast(val);
    }
    };
    /* Безопасный к переполнению каст арифметических типов. */
    template
    inline T safe_cast(const U& val)
    {
    return SafeCast::doIt(val);
    }
    /* ... */
    std::vector V(some_size);
    /* ... */
    int N = safe_cast(V.size());

https://forum.sources.ru/index.php?showtopic=420865&view=findpost&p=3842391

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку