Как называется оператор‹‹?

Я знаю имена большинства операторов, но не знаю, как называются operator<< и operator>>.

i.e.

operator=() // the assignment operator
operator==() // the equality of comparison operator
operator++() // the increment operator
operator--() // decrement operator etc.
operator<() // the less-than operator

и так далее...


person ScaryAardvark    schedule 19.07.2010    source источник
comment
Мне нравится называть их << и >>, но для некоторых людей произношение немного сложное.   -  person Eric Petroelje    schedule 19.07.2010
comment
в заголовке iostream ‹‹ — это оператор извлечения. (›› — вставка). Очень непослушный.   -  person Agnel Kurian    schedule 19.07.2010
comment
намного меньше и намного больше, чем ;)   -  person jk.    schedule 19.07.2010
comment
К сожалению, этот исчерпывающий справочник ничего не говорит по этому поводу... oops.se/~urban/pit /intercal.ps   -  person Brian Hooper    schedule 19.07.2010
comment
@Vulcan: Разве не наоборот?   -  person fredoverflow    schedule 19.07.2010


Ответы (7)


<< левая смена

>> сдвиг вправо

person Mitch Wheat    schedule 19.07.2010
comment
Ах. Таким образом, использование оператора ‹‹ было ублюдком для реализации потока. то есть std::cout ‹‹ Hello Mum ‹‹ std::endl. - person ScaryAardvark; 19.07.2010
comment
@ScaryAardvark: это называется перегрузкой - person ; 19.07.2010
comment
В лингвистике это называется ублюдком. - person dreamlax; 19.07.2010
comment
Ублюдок == перегрузка. В зависимости, конечно, от того, кто делает перегрузку;) - person Wayne Werner; 19.07.2010
comment
@ScaryAardvark: И это то, что меня больше всего смущает в C++. - person Felix Kling; 19.07.2010
comment
@Wayne: Это зависит от того, считаете ли вы, что cout ‹‹ ухудшает качество языка C++ :) - person ; 19.07.2010
comment
@Changeling: на самом деле ... Оператор должен вести себя в соответствии со своими обозначениями. т.е. * должен умножать, / должен делить и т. д. И ‹‹ должен сдвигаться влево. Вместо этого он сбрасывает информацию в поток. Что можно назвать бастардизацией. - person SigTerm; 19.07.2010
comment
@SigTerm и др.: + добавляет целые числа и объединяет строки, это незаконное использование? Я не думаю, что ‹‹ перегружен таким образом, вызывает много путаницы или ошибок в коде... +, вероятно, хуже с этой точки зрения, если что. - person Scott Stafford; 19.07.2010
comment
@Felix: В C++ нет ничего, что смущало бы вас больше, чем перегрузка operator<<, серьезно? Как насчет самого неприятного синтаксического анализа или фиаско статического порядка инициализации или бесчисленных случаев неопределенного поведения? - person fredoverflow; 19.07.2010
comment
@SigTerm: Вы против перегрузки? - person ; 19.07.2010
comment
Я думаю, что @Jon Purdy хорошо объясняет это, говоря, что их следует называть операторами вставки и извлечения (т.е. вставкой битов/строки). Смысл не полностью теряется, если вы думаете об этом таким образом, который в конечном итоге превратился в ИМХО. Если вы используете * в качестве примера, ну * используется для умножения и указателей. - person ; 19.07.2010
comment
@0A0D: Вы против перегрузки? Для меня это выглядит как очередной ложный аргумент. Перегрузка не имеет ничего общего с тем, что я сказал. - person SigTerm; 20.07.2010
comment
@Scott Stafford: объединяет строки, результат объединения содержит обе исходные строки, это их сумма, следовательно, +. Достаточно логично. Я не думаю, что ‹‹ я не согласен, и на этом все. Поведение оператора должно быть последовательным, и даже если использование операторов сдвига для iostream является стандартным, это не значит, что это хорошо. Поскольку поведение отличается, должны быть разные операторы для побитовых сдвигов и потоков ввода-вывода. - person SigTerm; 20.07.2010
comment
@0A0D: (т. е. вставка битов/строки). Неправильно. поток ›› я беру данные из потока, помещаю их в переменную и возвращаю ссылку на тот же поток. i ›› 2 не помещает значение в 2, оно сдвигает значение i и возвращает новое значение. т.е. у нас непоследовательное поведение. Что плохо, даже если все так делают... - person SigTerm; 20.07.2010
comment
@SigTerm: просто говорю, что если вы против двусмысленности одного оператора, то вы должны быть против всех. - person ; 20.07.2010
comment
@ 0A0D: Просто говорю, что если вы против двусмысленности одного оператора, то вы должны быть против всех. Неа. Это единственный неоднозначный оператор. - person SigTerm; 20.07.2010

<< — это и оператор вставки, и оператор сдвига влево.
>> — это оператор извлечения и оператор сдвига вправо.

В контексте iostreams они считаются вставкой/извлечением потока. В контексте битового сдвига это сдвиг влево и сдвиг вправо.

person Scott Stafford    schedule 19.07.2010
comment
+1 Вы делаете важное различие. Имя оператора меняется в зависимости от того, как он используется (и, что более важно, для какого типа данных он используется). Из-за этой особенности я слышал, что нотация << и >> упоминается как двойной левый и двойной правый знаки как общий способ ссылки на символ в бесконтекстной манере (аналогично тому, как вы могли бы назвать + плюс или / слэш как бы их не перегружали), но это никак не официально. - person bta; 19.07.2010

В потоках C++

  • << — оператор вставки.
  • >> — оператор извлечения.

В бинарных операциях

  • Сдвиг вправо (>>)
  • Сдвиг влево (<<)
person cpx    schedule 19.07.2010

Операторы сдвига битов

person davbryn    schedule 19.07.2010

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

person Jon Purdy    schedule 19.07.2010

‹‹ — это оператор «сдвига влево». Он сдвигает свой первый операнд влево на количество битов, указанное вторым операндом.

person Fraser    schedule 19.07.2010

Они называются символами Guillemet Left и Guillemet Right :)

person Robben_Ford_Fan_boy    schedule 19.07.2010
comment
У вас есть ссылка. Или сарказм просто пролетел над моей головой? - person Martin York; 19.07.2010
comment
Они похожи на метки Гийме, но называть их так означает, что каждый << нуждается в закрывающем >>. Я видел некоторых начинающих программистов, которые замечали сходство и совершали ошибку, пытаясь напрямую использовать символы « и » :) - person bta; 19.07.2010
comment
Хорошая мысль о необходимости закрытия ›› — слишком умно для моего же блага! На самом деле они используются и в Perl: en.wikipedia.org/wiki/Guillemets - person Robben_Ford_Fan_boy; 20.07.2010