Угловые скобки в паскале

Мне трудно понять нотацию <> в объявлении функции в качестве друга. (Это происходит из-за необходимости определить тело функции, которая была добавлена ​​другом во внешнюю свободную функцию.)

Это точно эквивалентно friend double f (A const& a); ?
Если да, то какова цель этой записи <> ? В конце концов f не имеет параметров шаблона по умолчанию.

Это тот случай, когда в целом:

Решение

Это так же, как friend double f (A const&) , Обычно вы используете пустые аргументы шаблона для устранения неоднозначности между функцией, не являющейся шаблоном f и шаблон функции f , Если у вас не было <> компилятор создал бы совершенно отдельную не шаблонную функцию f и другие f не сможет получить доступ к частным пользователям.

Это [так] случай, который в более общем плане:

Если, например, f объявлен вне класса как template f(A ); тогда да, они эквивалентны.

Другие решения

В большинстве случаев, когда используется имя шаблона, компилятор должен определить аргументы шаблона, которые определяют точную специализацию шаблона, который он представляет.

Похоже, вы знакомы с тем, как это делается для шаблонов классов (для простоты игнорируются пакеты параметров шаблона):

Каждый аргумент в пределах <> является одним из аргументов шаблона, в порядке с начала.

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

Но для шаблонов функций существует третья возможность автоматического вывода аргументов шаблона. Возможно, вам знакома идея вывода аргументов шаблона из вызова шаблона функции в такой форме func(a1, a2) , Но вычет также возможен в такой форме func (a1, a2) и может смешиваться и сопоставляться с другими источниками аргументов шаблона (опять же игнорируя пакеты параметров шаблона):

Каждый аргумент в пределах <> является одним из аргументов шаблона, в порядке с начала. Они заменяют соответствующие параметры шаблона повсюду в типе функции, прежде чем перейти к следующему шагу.

Любые оставшиеся параметры шаблона могут быть выведены (из типов выражений аргументов в вызове или из объявленных типов параметров при сопоставлении объявлений в подобных случаях). friend использование).

Для любых оставшихся параметров шаблона, не указанных явно и не выведенных, можно использовать аргумент шаблона по умолчанию. (Только C ++ 11 и более поздние версии — C ++ 03 вообще не разрешал шаблонам функций иметь аргументы шаблона по умолчанию.)

Так что в случае вызова функции допустимо использовать func<>(a1, a2) , что означает, что все аргументы шаблона должны быть либо выведены из типов a1 а также a2 или взятый из стандартного аргумента шаблона. Это в основном так же, как просто func(a1, a2) кроме того, что для func(a1, a2) , разрешение перегрузки может выбрать не шаблонную функцию, которая также называется func ; но используя func<>(a1, a2) , только шаблоны имеют право на рассмотрение.

Точно так же список аргументов шаблона может быть необходим в объявлении друга, чтобы компилятор знал, что он называет специализацию шаблона функции, а не простую не шаблонную функцию. Опять же, часто пустой список <> будет делать, предполагая, что все аргументы шаблона могут быть выведены из типов параметров функции. Обратите внимание на различия здесь:

Возможно. Хотя дело не только в том, чтобы брать аргументы шаблона непосредственно из специализации включающего шаблона класса. Вывод аргумента шаблона может стать более изощренным. Например, если у нас есть

Читайте также:  Creative sound blaster play 3 драйвер

то, какое совпадение объявления шаблона будет фактически отличаться для разных специализаций A ! Функция double f (A const&) из шаблона # 1 друг A , функция double f (A const&) из шаблона № 2 является другом A и функция double f (A const&) из шаблона № 3 — друг A , Никакие другие шаблонные специализации не являются друзьями этих трех специализаций A ,

Используются в математике для задания приоритета математических и логических операций. Например, (2+3)·4 означает, что надо сначала сложить 2 и 3, а затем сумму умножить на 4; аналогично выражение означает, что сначала выполняется логическое сложение а затем — логическое умножение Наряду с квадратными скобками используются также для записи компонент векторов:

Круглые скобки в математике используются также для выделения аргументов функции: для обозначения открытого сегмента и в некоторых других контекстах. Иногда круглыми скобками обозначается скалярное произведение векторов:

(здесь приведены три различных варианта написания, встречающиеся в литературе) и смешанное (тройное скалярное) произведение:

При обозначении диапазона чисел круглые скобки обозначают, что числа, которые находятся по краям множества не включаются в это множество. То есть запись А = (1;3) означает, что в множество включены числа, которые 1(открытый) интервал.

В химических формулах круглые скобки применяются для выделения повторяющихся функциональных групп, например, (NH4)2CO4, Fe2(SO4)3, (C2H5)2O. Также скобки используются в названиях неорганических соединений для обозначения степени окисления элемента, например, хлорид железа(II), гексацианоферрат(III) калия.

Скобки (обычно круглые, как в этом предложении) употребляются в качестве знаков препинания в естественных языках.

Во многих языках программирования используются круглые скобки для выделения конструкций. Например, в языках Паскаль и Си в скобках указываются параметры вызова процедур и функций, а в Лиспе — для описания списка.

Квадратные скобки

В лингвистике употребительны для обозначения транскрипции в фонетике или границ составляющих в синтаксисе.

Квадратными скобками в цитатах задают авторский текст, который проясняет контекст цитаты. Например, «Их [заложников] было около 100 человек».

Квадратными скобками в математике могут обозначаться:

  • Операция взятия целой части числа.
  • Для задания приоритета операций (аналогично круглым) в качестве скобок «второго уровня» — так легче различать вложенность скобок, например: [(2+3)·4]².
  • Векторное произведение векторов: c=[a,b]=[a×b]=a × b.
  • Закрытые сегменты; запись [1;3] означает, что в множество включены числа . В этом случае не соблюдается правило парности скобок, например, закрытый слева и открытый справа сегмент может быть обозначен как [x,y[ или [x,y).
  • Коммутатори антикоммутатор хотя для последнего иногда используют фигурные скобки без нижнего индекса.
  • Одинарная квадратная скобка объединяет совокупность уравнений или неравенств (чтобы совокупность выполнялась, достаточно, чтобы выполнялось любое из уравнений).

В химии квадратными скобками обозначают комплексные анионы и катионы, например: Na2[Fe(NO)(CN)5], [Ag(NH3)2] + . Также, по номенклатуре IUPAC в квадратные скобки заключается количество атомов в мостиках между двумя атомами в названии органических полициклических соединений, например: бицикло[2,2,2]октан.

В вики-разметке двойные квадратные скобки используются для внутренних ссылок, перенаправлений, категорий и интервики, одинарные — для внешних.

В программировании чаще всего применяются для указания индекса элемента массива.

Часто квадратные скобки используются для обозначения необязательности, например, параметров командной строки (см. подробнее в статье Форма Бэкуса — Наура).

Фигурные скобки

Фигурными скобками в одних математических текстах обозначается операция взятия дробной части, в других — они применяются для обозначения приоритета операций, как третий уровень вложенности (после круглых и квадратных скобок). Фигурные скобки применяют для обозначения множеств. Одинарная фигурная скобка объединяет системы уравнений или неравенств. В математике и классической механике фигурными скобками обозначается оператор специального вида, называемый скобками Пуассона: Как уже было сказано выше, иногда фигурными скобками обозначают антикоммутатор.

Читайте также:  Led экран что это

В вики-разметке двойные фигурные скобки применяются для шаблонов.

В программировании фигурные скобки являются или операторными (Си, C++, Perl и комментарием (Паскаль), могут также служить для образования списка (в Сетл).

Угловые скобки

В математике угловыми скобками обозначают кортеж, реже — скалярное произведение в предгильбертовом пространстве, например:

В квантовой механике угловые скобки используются в качестве так называемых бра и кет (от англ. bracketскобка), введённых П. А. М. Дираком для обозначения квантовых состояний (векторов) и матричных элементов. При этом квантовые состояния обозначаются как (кет-вектор) и (бра-вектор), их скалярное произведение как матричный элемент оператора А в определённом базисе как

Кроме того, в физике угловыми скобками обозначают усреднение (по времени или другому непрерывному аргументу), например, — среднее значение по времени от величины f.

В текстологии и издании литературных памятников угловыми скобками обозначают лакуны в тексте — .

Типографика

В HTML / программировании) для записи угловых скобок используют схожие по написанию парные знаки арифметических отношений неравенства « » .

В типографике же угловые скобки являются самостоятельными символами. От « » их можно отличить по бо́льшему углу между сторонами — .

В ТеХе для записи угловых скобок используются команды «langle» и «
angle
».

В стандартной пунктуации китайского, японского и корейского языков используются специальные символы — шевроны (англ. chevron ), схожие по написанию с угловыми скобками — для горизонтальной 〈 и 〉 или 《 и 》 и традиционной вертикальной печати — ︿ и ﹀ или ︽ и ︾ .

ASCII-тексты

В некоторых языках разметки, напр., HTML, XML угловыми скобками выделяют теги.

В вики-разметке также можно использовать HTML-разметку, например комментарии — « », которые видны только при редактировании статьи.

В программировании угловые скобки используются редко, чтобы не создавать путаницы между ними и знаками отношений (« »). Например в Си угловые скобки используются в директиве препроцессора #include вместо кавычек, чтобы показать что включаемый заголовочный файл необходимо искать в одном из стандартных каталогов для заголовочных файлов, например в следующем примере:

файл stdio.h находится в стандартном каталоге, а myheader.h — в текущем каталоге (каталоге исходника программы).

В некоторых текстах, сдвоенные парные « » используются для записи кавычек-ёлочек, например — >.

Косые скобки

Появились на пишущих машинках для экономии клавиш.

В программировании на языке Си косые скобки вместе с дополнительным знаком «*» обозначают начало и конец комментария:

Прямые скобки

Используются в математике для обозначения модуля числа или вектора, определителя матрицы:

Двойные прямые скобки

Используются в математике для обозначения нормы элемента линейного пространства: ||x||; иногда — для матриц:

мне нужно повторить строку, содержащую угловые скобки (), в файл на машине Windows. В основном я хочу сделать следующее:
echo some string brackets >>myfile.txt

Это не работает, так как интерпретатор команд путается с угловыми скобками. Я мог бы процитировать всю строку следующим образом:
echo "some string brackets" >>myfile.txt

но тогда у меня есть двойные кавычки в моем досье, что я не хочу.

Читайте также:  Amd crimson windows 10

экранирование скобок ala unix не работает либо:
echo some string brackets >>myfile.txt

6 ответов

escape-символ Windows по какой-то причине равен^.

правда, официальный символ побега ^ , но будьте осторожны, потому что иногда нужно три ^ символы. Это просто иногда:

один трюк из этой ерунды-использовать команду, отличную от echo чтобы сделать вывод и цитату в двойные кавычки:

обратите внимание, что это не сохранит ведущие пробелы в тексте приглашения.

есть методы, которые позволяют избежать ^ escape-последовательности.

вы можете использовать переменные с задержкой расширения. Ниже приведен небольшой пакетный скрипт демонстрации

или вы можете использовать цикл FOR /F. Из командной строки:

или из пакетного сценария:

причина, по которой эти методы работают, заключается в том, что как отложенное расширение, так и для переменного расширения происходят после специальных операторов, таких как , > , & , | , && , || разбираются. См.как работает интерпретатор команд Windows (CMD.EXE) разбирать скрипты? для получения дополнительной информации.

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

существует еще один способ избежать нескольких побегов при использовании труб. Вы можете явно создать экземпляр собственного процесса CMD и защитить один побег кавычками:

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

помните, что каждая сторона трубы выполняется в своем собственном CMD.EXE процесс, но процесс делает не наследовать состояние отложенного расширения-по умолчанию отключено. Поэтому вы должны явно создать экземпляр собственного CMD.EXE-процесс и используйте параметр /V: ON для включения отложенного расширения.

обратите внимание, что отложенное расширение выключено в родительский сценарий.

но весь ад вырвется, если в Родительском скрипте включено отложенное расширение. Следующее делает не работы:

проблема в том, что !test! расширяется в Родительском скрипте, поэтому новый процесс CMD пытается разобрать незащищенный и > .

вы могли бы избежать ! , но это может быть сложно, потому что это зависит от того, ! цитируется или не.

если не указано, то требуется двойной побег:

если указано, то используется один побег:

но есть удивительный трюк, который позволяет избежать всех побегов-охват левой стороны трубы предотвращает расширение родительского скрипта !test! преждевременно:

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

Aint пакетных сценариев весело ; -)

чтобы использовать специальные символы, такие как " > " в Windows с echo, вам нужно поместить перед ним специальный escape-символ.

не будет работать, так как " > "должен быть экранирован"^":

см. также escape-последовательности.

есть короткий пакетный файл, который печатает базовый набор специальных символов и их последовательностей.

экранирование скобок ala unix не работы:

Эхо некоторая строка скобки > > myfile.txt

обратная косая черта будет считаться началом абсолютного пути.

вы также можете использовать двойные кавычки для экранирования специальных символов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector