Ключевое слово имени типа существует в C++ для назад совместимости с †шаблоны œC? â€?

I†™m взятие класса C++ и моего учителя упомянул мимоходом что typename ключевое слово существовало в C++ (в противоположность использованию class ключевое слово в объявлении шаблона), для назад совместимости с †templates.†œC?

Это унесло мой ум. I†™ve никогда не замечаемый или слышал, говорят о чем-либо как C ++Г€ ™s шаблоны (кроме, возможно, preprocessorâ€\¦ и that†™s не действительно то же самое вообще) в ANSI C. Так, сделал я пропускаю что-то огромное где-нибудь, или это действительно тайное расширение gcc или что-то или действительно ли мой учитель путь является неосновным?

19
задан Robert Harvey 27 August 2013 в 15:25
поделиться

6 ответов

Я думаю, ваш учитель не в основе.

См. сообщение Стэна Липпмана: Почему C ++ поддерживает и класс, и имя типа для параметров типа , чтобы узнать истинную причину, по которой C ++ поддерживает и то, и другое.

27
ответ дан 30 November 2019 в 03:07
поделиться

Возможно, фраза, к которой стремился ваш учитель, была примерно такой: «... для обратной совместимости с типами C », т. Е. , осознавая проблему, заключающуюся в том, что template вводит в заблуждение, когда T является встроенным типом в стиле C, например char или int , как говорили другие. Но это же не класс! : -)

Некоторое время назад несколько специалистов из GCC предлагали , что создание механизма шаблонов, доступного для компилятора C, было бы хорошим способом реализации C99. , но, похоже, это ни к чему не привело.

6
ответ дан 30 November 2019 в 03:07
поделиться
5
ответ дан 30 November 2019 в 03:07
поделиться

Нет, не существует такой вещи, как шаблон в Си. typename даже не является ключевым словом в Си.

2
ответ дан 30 November 2019 в 03:07
поделиться

Это кажется неправильным. typename вообще не является зарезервированным словом в C.

Возможно, они неправильно выразились/запомнили и думали о "C с классами".

0
ответ дан 30 November 2019 в 03:07
поделиться

Ваш учитель придумывает. В C. нет такой вещи, как шаблоны. Ключевое слово typename существует по двум причинам:

  1. Более разумно сказать template , чем template , поскольку T может быть неклассовыми типами, такими как int или double .

  2. Его можно использовать для устранения неоднозначности синтаксического анализа в объявлениях типа A :: B * foo; . Объявляется ли при этом переменная с именем foo или это выражение умножения? (Ответ: он анализируется как последний. Чтобы сделать его объявлением, напишите typename A :: B * foo; , которое сообщает компилятору интерпретировать A :: B как имя типа, не имя переменной.)

См. http://pages.cs.wisc.edu/~driscoll/typename.html для подробного объяснения.

3
ответ дан 30 November 2019 в 03:07
поделиться