Подтвердить что ты не робот

Что такое cout/cin?

Я знаю Java и теперь хочу изучить С++. Я не могу понять, что такое cout (поток вывода символов) и cin (ввод символов). Являются ли эти глобальные переменные? Тогда почему

"My message">>cout; 

не работает? Но

cout<<"My message";

работает.

4b9b3361

Ответ 1

cout - это экземпляр класса std::ostream, и да, это глобальная переменная. Но operator>>(char *, ostream& os); не был объявлен соответствующим заголовком, поэтому "My message">>cout; даст ошибку чего-то вроде "не может найти оператор → , который принимает аргументы const char * и std:: ostream" (и возможно, намного больше ошибок, потому что иногда компиляторы очень смущаются такими вещами).

cin - это то же самое, кроме std::istream

Если вы действительно хотите общаться с народами, вы можете сделать:

template<typename T>
std::ostream& operator>>(T x, std::ostream& os)
{
   os << x;
   return os;
}

Конечно, это не сработает для "My Message " >> "Some other string" >> cout;, что, вероятно, является одной из причин, по которой это не было сделано.

Обратите внимание, что это просто незначительное злоупотребление перегрузкой оператора, где у нас есть пользовательский тип, как левая, и стандартный или нестандартный тип с правой стороны. cout ничем не отличается от какой-либо другой переменной пользовательского типа.

Ответ 2

std::cout и std::cin действительно являются глобальными переменными. Ваш код не компилируется, потому что это не так, как работает язык. Вы должны поместить поток слева, а затем оператор, а затем переменные, которые вы вставляете в/из. (Для вывода вы можете использовать литералы и выражения, а также переменные.)

Ответ 3

рассмотрите стрелки как потоки. & Л; < обозначает выходной поток, а → обозначает входной поток.

так что cout < "привет" означает вывод на экран когда cin → a означает запрос от пользовательского ввода для переменной a

cout также может использовать "+", например, вы можете добавить больше строк в один поток, как этот

cout < "Hello" < "мир" < "Я джон";

cin таким же образом может запрашивать ввод от нескольких переменных

cin → a → b; попросит у пользователя ввести два раза по одной для каждой переменной

Ответ 4

iostream - это заголовочный файл, содержащий классы, обрабатывающие операции ввода и вывода для консоли. Это похоже на создание объекта, когда вы говорите "cin" для операции ввода ввода ввода для консоли в файле заголовка. То же самое можно сказать о "cout" , где объект создается из операции вывода обработки класса в консоль в файле заголовка.

Когда вы рассматриваете "cin", представьте себе создание канала, подключенного к консоли и вашей программе, и объекта "cin", который берет ваши входы с консоли, которые вы предоставляете с помощью вашей клавиатуры, и сбрасывая их на программу. Это причина, по которой вы можете видеть наличие оператора " → " для cin, и вы можете найти аналогию с трубой, где оператор выполняет задание указания направления для объекта "cin".

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

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

Итак, "Мое сообщение" → cout; не работает так, как вы ожидаете, потому что нет объекта и оператора для выполнения вашей задачи, тогда как cout < "My message"; делает.

Технические аспекты были описаны Мацем Петерсоном. Это просто, чтобы дать вам общую картину того, что на самом деле происходит наглядно. Надеюсь, это поможет вам.