Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Приведение типа

#cpp


В чем отличие этих двух способов приведения?

char c = 10;

int i = int(c);
float f = (float)c;

    


Ответы

Ответ 1



Оба способа осуществляют явное преобразование типов. Первый способ называется функциональной нотацией (functional notation), потому что выглядит так же как вызов функции. Он может использоваться только для простых спецификаторов типа, и не будет работать (компилироваться) на составных, например, для unsigned char или long long int. В случае составного типа можно использовать typedef: typedef long double ld; ld(42); // ок long double(42); // ошибка Если инициализатор не задан (т.е. в скобках пусто), то выражение T() даст zero-initialized значение указанного типа. Второй способ представляет собой преобразование в сишном стиле (cast notation), т.к. использовался в языке C и для совместимости оставлен в C++. Такое преобразование, т.е. (T)выражение, интерпретируется компилятором вполне определённой последовательностью действий из явных преобразований (см. ссылку). Такое преобразование требует явного наличия преобразуемого выражения. Т.е. нельзя написать просто (T) и получить инициализированное нулём значение, как в предыдущем случае.

Комментариев нет:

Отправить комментарий