Подтвердить что ты не робот

Для вложенных шаблонов, когда `>>` стал стандартным С++ (вместо `>>`)?

Кажется, я вспоминаю, в течение многих лет, предупреждая о том, что два символа > находятся рядом друг с другом (без пробела) при работе с вложенными параметрами шаблона. Я даже смутно помню, как объявляли векторы векторов и сталкивались с этой ошибкой компиляции.

Но теперь я обнаружил, что нет абсолютно ничего плохого в компиляции страшного >>...

Мой вопрос (ы):

В какой момент это соглашение стало приемлемой практикой?

Является ли он частью стандартного С++?

Всегда ли он был частью стандарта, а используемые мною компиляторы (и профессора, которых я имел) в колледже еще не поддерживали?

Возможно, эти вопросы немного историчны, но для меня кажется, что правильный исторический контекст делает фактическое запоминание тривиальным.

4b9b3361

Ответ 1

Шаблоны, закрытые с вложенными >>, официально поддерживаются на предстоящем стандарте С++ 0x (теперь С++ 11). Раньше вам понадобилось бы место или компилятор, который прошел лишнюю милю для вас (и делал то, что не указано стандартом).

Проблема связана с тем, что >> в C - это оператор с правым сдвигом, который является одним лексическим токеном, который конфликтует с двумя отдельными токенами >, которые понадобятся во время стадии синтаксического анализа в классическом -конструированный компилятор С++ (и только в случае шаблонов, а не когда он фактически является сдвигом вправо). Другими словами, >>, если разрешено закрывать вложенные шаблоны, лексически неоднозначно, но это может быть (и в настоящее время) адресовано дополнительной сложностью во время синтаксического анализа (что в современном С++ действительно ничего нового).

Ответ 2

Синтаксис двойной угловой скобки в шаблонах по-прежнему является незаконным в С++, но некоторые компиляторы (в частности, Visual Studio) позволяют это в любом случае. В С++ 0x, который был только что ратифицирован и ожидает публикации, это было исправлено.

Короче говоря, это еще не законный С++, но скоро. Компиляторы Sme позволяют это, но так как не все вы все равно должны помещать пробелы в угловые скобки. Через два-три года вам больше не понадобится.

Надеюсь, это поможет!

Ответ 3

С++ 0x. Вы можете посмотреть этот мой вопрос для получения дополнительной информации.

Ответ 4

Это не было в стандарте (до недавнего времени - несколько дней назад).

Почему?

Одно слово: эффективность.

Запрет, который делает контекст грамматики свободным. Это сделает компилятор немного быстрее. В старые добрые времена каждый бит подсчитывается. Теперь, с продвижением как алгоритма, так и аппаратного обеспечения, никто не хочет этой проблемы.