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

273
05 декабря 2017, 21:29

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

char c = 10;
int i = int(c);
float f = (float)c;
Answer 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) и получить инициализированное нулём значение, как в предыдущем случае.

READ ALSO
Сформировать строку для cURL из аргументов

Сформировать строку для cURL из аргументов

Строка для curl -> char* Делаю так:

221
Создание процесса

Создание процесса

Под Windows есть функция создания нового процесса CreateProcess которая создает процесс в новом окне, и в нее можно передать флаг CREATE_NO_WINDOW, что бы это...

211
QLineEdit. Ввод с виртуальной клавиатуры

QLineEdit. Ввод с виртуальной клавиатуры

При использовании QLineEdit в приложении под андоид (Qt 57, Android 6

220