#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) и получить инициализированное нулём значение, как в предыдущем случае.
Комментариев нет:
Отправить комментарий