ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Category:

C++: пробел между угловыми скобками шаблонов

Очередной устаревший на сегодня отрывок из учебника Лафоре.

Глава 15 «Стандартная библиотека шаблонов (STL)»,
раздел «Введение в STL» / подраздел «Контейнеры» / подподраздел «Адаптеры контейнеров»,
цитата (стр.687):

Для практического применения этих классов необходимо использовать как бы шаблон в шаблоне. Например, пусть имеется объект типа стек, содержащий значения int, порожденный классом «очередь с двусторонним доступом» (deque):

stack< deque<int> > aStak;

Деталь, на которую стоит обратить внимание при описании этого формата, это пробелы, которые необходимо ставить между двумя закрывающими угловыми скобками. Помните об этом, потому что такое выражение

stack<deque<int>> aStak;

приведет к синтаксической ошибке — компилятор интерпретирует >> как оператор.


Я проверил оригинал на английском, там написано то же самое (перевод на русский, конечно, не фонтан, но более-менее смысл передает).

На самом деле, современные компиляторы должны принять без ошибок оба указанных выше варианта. Конечно, если они соблюдают стандарт языка C++. Как пишут в интернетах, соответствующие изменения были внесены в стандарт, начиная с C++11. Конкретно следует обратить внимание в этом стандарте на параграф 14.2 «Names of template specializations» (часть 3). Текст стандарта в формате PDF можно найти на сайте www.open-std.org:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3690.pdf

Я проверил в среде «Visual Studio Community 2017»: оба варианта работают. В стандартных заголовочных файлах, кстати, там, где я смотрел, пробел между двумя закрывающими угловыми скобками проставлен. Видимо, для лучшей читабельности кода, либо чтобы с этими файлами смогли работать компиляторы старых версий.

Лафоре об этом, конечно, знать не мог, так как учебник вышел в 2001 году.

Обсуждение на портале Stackoverflow.com:
https://stackoverflow.com/questions/15785496/c-templates-angle-brackets-pitfall-what-is-the-c11-fix
Tags: Образование, Программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments