"<<" 和 ">>" 在 cout/cin 的C++中是什么意思?

What does "<<" and ">>" mean in C++ for cout/cin?

本文关键字:gt lt 是什么 C++ 意思 cout cin      更新时间:2023-10-16

请原谅我可能会问一个相当简单的问题,但是插入操作符在程序中实际上意味着什么?(如。cout <</cin >>)

这取决于你如何为你的类重载它。

  • 对于std::cout,使用<<写入标准输出。>>std::cout没有重载。所以std::cout >> x会给出编译错误。

  • std::cin的情况下,>>用于从标准输入读取。<<std::cin没有重载。所以std::cin << x会给出编译错误。

  • 对于您的自定义类,您可以重载<<>>,或者两者都重载,并且在函数中您可以做任何您喜欢的事情。例如,在下面的代码中,我为std::vector<T>重载<<以向vector

    添加元素
      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!
    

    所有的整数都加到向量上!

    同样地,我们可以为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++ )
            out << v[i] << ' ';
         return v;
      }
    

    现在我们可以将向量打印为:

      v >> std::cout; //crazy!
    

关键是你可以以任何你想要的方式重载这些操作符。过载和它们的用法看起来有多疯狂或理智取决于你。例如,对于大多数程序员来说,语法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] << ' ';
      return out;
}

现在你可以这样写:

std::cout << v << std::endl; //looks sane!

它们是位移位运算符(<<是向左移位,>>是向右移位)。它们通常也被重载为流操作符(<<表示流输出,>>表示流输入)——流类型在左侧(例如std::ostreamstd::istream),而任何其他类型在右侧。

写入或读取对象;

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),因此它成为对象序列化的通用机制。

;<和>>是简单的操作符,就像+、-、=、==、+=、/=等一样,您得到了演练。这意味着,它取决于与之一起使用的对象/结构。对于cout和cin,这些都是读写操作符,但是您可以重载操作符来执行完全不同的操作。

class myclass {
    int x;
    myclass operator << ( int a ) { 
        x += a;
    }
}

现在,我并不是说任何人都应该这样做,但是如果您将myclass对象与此操作符一起使用,则会导致添加。因此,如您所见:如何处理"<<"或">>"取决于操作符是如何重载的。

它们通常被重载并用于流。& lt; & lt;实际上是一个左移运算符。>>实际上是右移操作符