Я знаю Java и теперь хочу изучить С++. Я не могу понять, что такое cout (поток вывода символов) и cin (ввод символов). Являются ли эти глобальные переменные? Тогда почему
"My message">>cout;
не работает? Но
cout<<"My message";
работает.
Я знаю Java и теперь хочу изучить С++. Я не могу понять, что такое cout (поток вывода символов) и cin (ввод символов). Являются ли эти глобальные переменные? Тогда почему
"My message">>cout;
не работает? Но
cout<<"My message";
работает.
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
ничем не отличается от какой-либо другой переменной пользовательского типа.
std::cout
и std::cin
действительно являются глобальными переменными. Ваш код не компилируется, потому что это не так, как работает язык. Вы должны поместить поток слева, а затем оператор, а затем переменные, которые вы вставляете в/из. (Для вывода вы можете использовать литералы и выражения, а также переменные.)
рассмотрите стрелки как потоки. & Л; < обозначает выходной поток, а → обозначает входной поток.
так что cout < "привет" означает вывод на экран когда cin → a означает запрос от пользовательского ввода для переменной a
cout также может использовать "+", например, вы можете добавить больше строк в один поток, как этот
cout < "Hello" < "мир" < "Я джон";
cin таким же образом может запрашивать ввод от нескольких переменных
cin → a → b; попросит у пользователя ввести два раза по одной для каждой переменной
iostream - это заголовочный файл, содержащий классы, обрабатывающие операции ввода и вывода для консоли. Это похоже на создание объекта, когда вы говорите "cin" для операции ввода ввода ввода для консоли в файле заголовка. То же самое можно сказать о "cout" , где объект создается из операции вывода обработки класса в консоль в файле заголовка.
Когда вы рассматриваете "cin", представьте себе создание канала, подключенного к консоли и вашей программе, и объекта "cin", который берет ваши входы с консоли, которые вы предоставляете с помощью вашей клавиатуры, и сбрасывая их на программу. Это причина, по которой вы можете видеть наличие оператора " → " для cin, и вы можете найти аналогию с трубой, где оператор выполняет задание указания направления для объекта "cin".
В то время как для "cout" представьте, что вы создаете канал, подключенный к консоли и вашей программе, и объект "cout" , беря свой вход из программы и выгружая их на консоль. Эта причина, по которой вы можете видеть наличие "< оператор для cout, и вы найдете аналогию с трубой, где оператор выполняет задание указания направления для объекта "cout" .
Итак, в основном вам нужно сначала указать, какой объект вы создадите для своих операций, а затем назначить оператора для выполнения своей задачи. Если вы включите заголовочный файл, то, как вы могли бы использовать эти объекты в любой точке вашей программы.
Итак, "Мое сообщение" → cout; не работает так, как вы ожидаете, потому что нет объекта и оператора для выполнения вашей задачи, тогда как cout < "My message"; делает.
Технические аспекты были описаны Мацем Петерсоном. Это просто, чтобы дать вам общую картину того, что на самом деле происходит наглядно. Надеюсь, это поможет вам.