Что оператор << делает в C ++? - PullRequest
5 голосов
/ 24 июля 2010

В приведенном ниже примере, что именно делает оператор <<? Я предполагаю, что это не побитовый оператор.

std::cout << "Mouse down @ " << event.getPos() << std::endl;

Я понимаю, что код будет делать здесь: использовать стандартный выход, отправить этот текст, отправить конец строки. Просто я никогда не сталкивался с использованием этого << кроме как на сыром бинарном. </em>

Я начинаю с C ++. И, как своего рода оператор, трудно найти описание этого и что это значит. Может ли кто-нибудь просветить меня и / или дать мне указание на то, что гуглить?

Спасибо Ross

Ответы [ 6 ]

11 голосов
/ 24 июля 2010

Ответ таков: оператор << по умолчанию выполняет сдвиги влево для целочисленных типов, но его можно перегружать, чтобы делать все, что вы хотите!

Этот синтаксис для передачи строк в поток был первым(Я думаю) продемонстрировал в одноименной книге изобретателя С ++ Бьярно Страуструпа Язык программирования C ++ .Лично я чувствую, что переопределение оператора для выполнения ввода-вывода является трюком;это делает для классного демонстрационного кода, но не способствует пониманию кода.Перегрузка операторов как метод широко критиковалась в сообществе языков программирования.


РЕДАКТИРОВАТЬ: Поскольку никто еще не упомянул об этом:

operator<<определенный в классе ostream, из которых cout является экземпляром.Определение класса находится в библиотеке iostream , которая #include 'd как <iostream>.

3 голосов
/ 24 июля 2010

Как и любые операторы в c ++, << выполняет операции. Используя перегрузку с левым операндом ostream (std :: cout имеет тип ostream), он используется как оператор потока для печати данных различных типов. Например, вы можете сделать </p>

int x = 10;
std::string y = " something";
std::cout << x << y << std::endl;

Это выведет "10 что-то".

@ не заменяется ничем в этом контексте. оператор << просто сбросить результат. </p>

std :: endl - это не только конец строки, он также сбрасывает результат на устройство вывода.

3 голосов
/ 24 июля 2010

Это иногда называют «оператором вставки потока», и это наиболее распространенное использование: для вставки данных в поток.Однако иногда я видел его перегруженным для вставки данных в другие объекты при выполнении таких вещей, как сериализация, например.

3 голосов
/ 24 июля 2010

operator<< перегружен. Проверьте Перегрузка оператора .

1 голос
/ 24 июля 2010

Попробуйте написать программу, в которой вы создаете объект и вызываете перегруженный оператор <<, </p>

class x {
    //declare some pvt variables
    //overload << operator
};

int main() {
    x obj;
    cout << obj;
}

Поступая так, вы поймете причину использования следующего утверждения

cout << string_var << int_var;

Вы можете принять 'string' и 'int' как классы, которые перегружены оператором <<, даже если это не так.

0 голосов
/ 24 июля 2010

Это оператор " битовое смещение влево ".

n << p </strong>

Сдвигает биты из n левых p позиций.Нулевые биты сдвинуты в младшие позиции.3 << 2 равно 12. </em>

В контексте вопроса он помещает что-то в ' cout ', который является текущим выходным потоком.

...