Простой вопрос о принуждении типа в C ++

StackOverflow https://stackoverflow.com/questions/2907473

  •  04-10-2019
  •  | 
  •  

Вопрос

Учитывая функциональный прототип и определение типа:

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top