Ответ 1
Это просто артефакт правил синтаксиса - синтаксис позволяет использовать ключевые слова class
или typename
для указания параметра шаблона типа. В противном случае параметр должен быть параметром шаблона "не-тип" (в основном интеграл, указатель или ссылочный тип).
Я полагаю, что Stroustrup (и кто бы он ни был, возможно, взял на себя вход) решил, что нет необходимости включать struct
в качестве ключевого слова aa, чтобы указать параметр шаблона типа, поскольку не было необходимости в обратной совместимости с C.
На самом деле, мое воспоминание (мне нужно будет сделать некоторую книгу, когда я вернусь домой) заключается в том, что, когда typename
был добавлен, чтобы указать параметр типа шаблона, Stroustrup имел бы любил убирать с помощью ключевое слово class
для этой цели (поскольку это было запутанно), но было слишком много кода, который опирался на него.
Edit:
Оказывается, история больше похожа на (от запись блога Стэном Липпманом):
Причиной для двух ключевых слов является исторические. В исходном шаблоне спецификации, Stroustrup повторно использовал существующее ключевое слово класса, чтобы указать типа, а не ввести новое ключевое слово, которое, конечно, может сломаться существующих программ. Дело не в том, что новое ключевое слово не рассматривалось - просто что он не считается необходимым учитывая его потенциальное нарушение. И вверх до стандарта ISO-С++, это было единственный способ объявить тип Параметр.
Повторение существующих ключевых слов кажется всегда сеять путаницу. Мы обнаружили, что что новички [удивлялись] является ли использование класса ограниченный или ограниченный тип аргументы, которые пользователь может указать типа, а не, скажем, встроенный или указательный тип. Так что было какое-то ощущение, что введено новое ключевое слово ошибка.
Во время стандартизации определенные конструкции были обнаружены в пределах определение шаблона, хотя они имели в виду для обозначения деклараций
...
Комитет решил, что новый ключевое слово было всего лишь билетом, чтобы получить компилятор с его неудачной одержимостью с выражениями. Новое ключевое слово было самоописательное имя.
...
Поскольку ключевое слово было в платежной ведомости, черт возьми, почему бы не устранить путаницу, вызванную первоначальным решением о повторном использовании ключевое слово класса. Конечно, учитывая обширный объем существующего кода и книг и статей, переговоров и проводки с использованием ключевого слова class, они решил также сохранить поддержку этого использование ключевого слова. Так вот почему у вас есть оба.