Простите меня, возможно, задав довольно простой вопрос, но что фактически означает оператор вставки и делает в программе? (например, cout <</cin >>)
Что означает "<<" и ">>" в С++ для cout/cin?
Ответ 1
Это зависит от того, как вы его перегружаете для своего класса.
-
В случае
std::cout<<используется для записи в стандартный вывод.>>не перегружен дляstd::cout. Так чтоstd::cout >> xвыдаст ошибку компиляции. -
В случае
std::cin>>используется для чтения из стандартного ввода.<<не перегружен дляstd::cin. Так чтоstd::cin << xвыдаст ошибку компиляции. -
Для вашего пользовательского класса вы можете перегрузить
<<или>>, или оба, и в функции вы можете делать все что угодно. Например, в следующем коде я перегружаю<<дляstd::vector<T>чтобы добавить элементы в вектор,template<typename T> std::vector<T> & operator<<(std::vector<T> & v, T const & item) { v.push_back(item); return v; }Теперь я могу использовать эту перегрузку, чтобы написать это:
std::vector<int> v; v << 1 << 2 << 3 << 4 << 5; //inserts all integers to the vector!Все целые числа добавляются в вектор! Смотрите онлайн демо: http://ideone.com/TsqtS
Аналогично, мы можем перегрузить
>>дляstd::vector<T>чтобы распечатать все элементы в нем как:template<typename T> std::vector<T> & operator>>(std::vector<T> & v, std::ostream & out) { for(size_t i = 0 ; i < v.size(); i++ ) std::cout << v[i] << std::endl; return v; }И теперь мы можем напечатать вектор как:
v >> std::cout; //crazy!Демо онлайн: http://ideone.com/BVSm7
Дело в том, что вы можете перегружать эти операторы любым удобным для вас способом. Насколько сумасшедшими или вменяемыми будут выглядеть перегрузки и их использование - решать только вам. Например, синтаксис v >> std::cout выглядел бы безумным для большинства программистов, как я полагаю. Лучшая и, вероятно, нормальная перегрузка была бы для std::ostream как:
template<typename T>
std::ostream & operator << (std::ostream & out, const std::vector<T> & v)
{
for(size_t i = 0 ; i < v.size(); i++ )
out << v[i] << std::endl;
return out;
}
Теперь вы можете написать это:
std::cout << v << std::endl; //looks sane!
Демо: http://ideone.com/jce2R
Ответ 2
Они являются операторами побитового сдвига (<< - сдвиг влево, >> - сдвиг вправо). Они также обычно перегружаются как потоковые операторы (<< тогда означает поток, поток >>) - с типом потока с левой стороны (например, std::ostream или std::istream) и любым другим типом с правой стороны.
Ответ 3
Он пишет или читает объекты;
std::cout << 5; // writes the integer 5 to the standard output
int x;
std::cin >> x; // reads an integer from the standard input
Он перегружен для всех стандартных типов.
И большинство людей переопределяют их для собственных пользовательских типов.
Примечание. Левая часть оператора может быть любым типом потока (например, std:: fstream или std:: stringstream), поэтому он становится обобщенным механизмом сериализации объектов.
Ответ 4
< < и → - простые операторы, как +, -, =, ==, + =,/= и т.д., вы получаете упражнение. Это означает, что это зависит от объекта/структуры, с которой вы его используете. С cout и cin это операторы чтения/записи, но вы можете перегрузить оператора, чтобы сделать что-то совершенно другое.
class myclass {
int x;
myclass operator << ( int a ) {
x += a;
}
}
Теперь я не говорю, что кто-то должен это делать, но это приведет к добавлению, если вы будете использовать объект myclass с этим оператором. Итак, как вы можете видеть: что вы делаете с "< <" или " → " зависит от того, как оператор перегружен.
Ответ 5
Они часто перегружаются и используются для потоков. & Л; < фактически является оператором сдвига лева. → фактически является оператором правого сдвига.