Простой вопрос о принуждении типа в C ++
Вопрос
Учитывая функциональный прототип и определение типа:
int my_function(unsigned short x);
typedef unsigned short blatherskite;
Является следующей ситуацией, определенной стандартом:
int main(int argc, char** argv) {
int result;
blatherskite b;
b=3;
result = my_function(b);
}
Получаю ли я принуждение к типу предсказуемо через функциональный прототип?
Решение
Если ваш вопрос действительно касается ли типов аргумента и параметр соответствует, а затем ответ да. typedef
Не вводит новый тип, он создает только псевдоним для существующего. Переменная b
имеет тип unsigned int
, как параметр, хотя b
объявляется с помощью Typedef-name blatherskite
.
Ваш пример не очень хорош для демонстрации этого. Все интегральные типы являются конвертируемы друг другу в C ++, поэтому (игнорирование проблем диапазона) код будет определено, даже если blatherskite
обозначенный другой тип (новый тип). Но это не так. Так что это тоже совершенно действует
void foo(unsigned int* p);
...
blatherskite *pb = 0;
foo(pb); // <- still valid
Другие советы
Тип принуждения не требуется. Typedef - это просто псевдоним для того же типа, поэтому вы проходите unsigned short
на функцию, которая принимает unsigned short
.