2016-05-25 4 views
0

Например:При использовании cout и cin, что делают операторы «<<" and ">>» и почему мы их используем?

int age; 
cin >> age; 

cout << "You are " << age << " years old!" << endl; 

Почему мы используем "< <" и ">>" операторы здесь? Что они делают? Я несколько понимаю бит-сдвиг, но я не понимаю, как это работает.

+1

Прочтите любую книгу на C++. Это объяснит вам все в первой главе или двух. –

+0

[Большой список книг на C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list). –

+0

Не полезно говорить кому-то «просто читать книгу», когда у них есть конкретный вопрос только по одному аспекту языка. OP явно знает, по крайней мере, _some_ C++. Вы не можете искать в Google или индекс книги для чего-то, когда не знаете, что он назвал (перегрузка оператора в этом случае). –

ответ

8

Они называют потока ввода оператора (<<) и потока оператор экстракции (>>).

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

Они так же, как любой вызов функции - она ​​работает как:

leftShift(leftShift(leftShift(leftShift(cout, "You are "), age), " years old!"), endl); 

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

1

Это перегрузка оператора. Операторы битрейта перегружены для классов потоков, которые служат другим целям (чтения и записи в потоки). См: http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/

+0

И какова цель в этих случаях? Это что-то прошлое, потому что «cout будет выводить эти вещи», а «cin сделает это целое число равным входному сигналу» или происходит более конкретная вещь? – CodeMan42

+1

Это всего лишь синтаксический сахар. Перегруженные операторы также связаны с цепочкой (т. Е. Возвращают экземпляр объекта потока), и поэтому вы можете сделать серию «<<' вызовов в цепочке. Это просто выглядит лаконично. –

1

>> и << были перегружены в виде потока функций, таких как:

std::ostream & operator << (std::ostream &, int) 

(и другие)

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

Это не имеет никакого отношения к смещению битов, за исключением того, что он использует тот же оператор '< <' и '>>'.