Почему typedefs не являются строго типизированными? - PullRequest
6 голосов
/ 18 ноября 2011

В чем причина того, что typedefs не печатается строго?Есть ли какая-то выгода, которую я не вижу или это связано с обратной совместимостью?См. Этот пример:

typedef int Velocity;
void foo(Velocity v) {
    //do anything;
}
int main() {
    int i=4;
    foo(i); //Should result in compile error if strongly typed.
    return 0;
}

Я не прошу обходных путей для получения строго типизированного типа данных, но хочу только знать, почему стандарт не требует, чтобы typedefs был строго типизирован?

Спасибо.

Ответы [ 3 ]

14 голосов
/ 18 ноября 2011

Поскольку C не является строго типизированным, а typedef берет свое начало в этом мышлении

typedef просто для удобства и читабельности, он не создает новый тип.

4 голосов
/ 18 ноября 2011

typedef - это просто миссомер (как и многие другие ключевые слова).Думайте об этом как о typealias.

C, напротив, имеет полное представление о том, что такое совместимые типы.Это позволяет, например, связать блоки компиляции вместе, даже если объявления протопайсов функций выполняются только с совместимыми типами, а не с идентичными.Все это проистекает из простой практической необходимости в повседневной жизни, поскольку все еще может дать некоторые гарантии реализации.

0 голосов
/ 18 ноября 2011

Даже если бы Velocity отличался от типа int, ваш код скомпилировался бы и работал бы просто нормально из-за правил преобразования типов.Что не сработает, так это передача выражения типа Velocity * в функцию, ожидающую int * и т. Д. Если вы хотите добиться последней формы принудительного применения типа, просто сделайте Velocity тип структуры или объединения, содержащий одно целое число,и теперь у вас будет новый реальный тип.

...