Как се нарича оператор‹‹?

Знам имената на повечето оператори, но не съм сигурен как се наричат ​​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 ‹‹ Здравей мамо ‹‹ std::endl. - person ScaryAardvark; 19.07.2010
comment
@ScaryAardvark: Нарича се претоварване - person ; 19.07.2010
comment
В лингвистиката се нарича бастардизация. - person dreamlax; 19.07.2010
comment
Bastardised == претоварване. В зависимост разбира се от това кой извършва претоварването ;) - 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 et al: + добавя ints и конкатенира низове, това копеле ли е? Не мисля, че претоварването на ‹‹ по този начин причинява много объркване или бъги в кода... + вероятно е по-лош от тази гледна точка, ако не друго. - person Scott Stafford; 19.07.2010
comment
@Felix: Няма нищо в C++, което да ви обърква повече от претоварването на operator<<, сериозно ли? Какво ще кажете за най-досадния анализ или фиаското на реда за статична инициализация или безбройните случаи на недефинирано поведение? - person fredoverflow; 19.07.2010
comment
@SigTerm: Против претоварването ли сте? - person ; 19.07.2010
comment
Мисля, че @Jon Purdy го обяснява добре, като казва, че те трябва да се наричат ​​оператори за вмъкване и извличане (т.е. вмъкване на битове/низ). Значението не е напълно изгубено, ако мислите за него по този начин, в което в крайна сметка еволюира IMHO. Ако използвате * като пример, добре * се използва за умножение и указатели. - person ; 19.07.2010
comment
@0A0D: Против претоварването ли си? Прилича ми на поредния аргумент на безумието. Претоварването няма нищо общо с това, което казах. - person SigTerm; 20.07.2010
comment
@Scott Stafford: конкатенира низове, резултатът от конкатенацията съдържа и двата оригинални низа, това е тяхната сума, следователно +. Достатъчно логично. Не мисля, че съм несъгласен и това е краят. Поведението на оператора трябва да бъде последователно и дори ако използването на оператори за смяна за iostream е стандартно, това не означава, че е добро. Тъй като поведението е различно, трябва да има различни оператори за побитови смени и iostreams. - 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 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
Те приличат на знаци Guillemet, но ако ги наречем така, би означавало, че всяко << се нуждае от затварящо >>. Виждал съм някои начинаещи програмисти, които забелязват приликата и правят грешката да се опитват да използват символите « и » директно :) - person bta; 19.07.2010
comment
Добра гледна точка относно изискването за затваряне ›› - твърде умно за мое добро! Те всъщност се използват и в Perl: en.wikipedia.org/wiki/Guillemets - person Robben_Ford_Fan_boy; 20.07.2010