Qubc
@Qubc
Ненавижу полисемию.

Есть ли способ получать предупреждение при преобразовании char в int?

Почему спрашиваю:
1. Согласно стандарту, скорее всего, не будет такой реализации, где размер char будет больше размера int. Это ок.
2. Знаковость char не определена. Это не ок.
3. Если функция возвращает код символа в int, то я могу случайно сохранить его в char и сравнивать с int EOF. Так делать нельзя, потому что повышение char до int не стандартизировано, а следовательно - может произойти zero-extension или sign-extension.
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
введите проверку на ваши условия и кидайте эксепшен
Ответ написан
Комментировать
@res2001
Developer, ex-admin
По стандарту sizeof(char) == 1, sizeof(int) >= 2.
char->int и int->char - это 2 разных преобразования. Судя по вопросу для вас это одно и то же.
Первое проходит без предупреждения, поскольку значимость не теряется. На второе компилятор ругнется, обычно это warning, опциями компилятора можно сделать чтоб был error.
Повышение char до int не зависимо от того какой конкретно char в данной системе вполне стандартизовано и укладывается в стандартное расширение целочисленных типов.
Обратное преобразование приведет к обрезанию значащих бит, это то же описано в стандарте.
Ответ написан
by_kapt0xa
@by_kapt0xa
Учу кресты катаюсь на велике
char ToChar(int val)
{
    if(static_cast<unsigned>(val) <= 255)  // better to use std::numeric_limits<unsigned char>::max() instead of 255
    {
        return static_cast<char>(val);
    }
    else 
    {
        throw "trying to convert int to char with loosing of data"; // better to throw some another exception from the lib #include <stdexcept>
    }
}


код написан на коленке, могут быть синтаксические оишбки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы