C++ 如何理解ostream&;操作员<&书信电报;(ostream&;os,const unsigned char*s)
对于函数声明,如C++ 如何理解ostream&;操作员<&书信电报;(ostream&;os,const unsigned char*s),c++,C++,对于函数声明,如 ostream& operator<< (ostream& os, const unsigned char* s); ostream&operator因为您可以像这样返回“os”,所以可以进行链接 std::cout << "string1" << "string2" << std::endl; std::cout返回简单对象需要编译器生成对象副本,但返回引用则不需要。运算符返回ostream&(即对ostre
ostream& operator<< (ostream& os, const unsigned char* s);
ostream&operator因为您可以像这样返回“os”,所以可以进行链接
std::cout << "string1" << "string2" << std::endl;
std::cout返回简单对象需要编译器生成对象副本,但返回引用则不需要。运算符返回ostream&
(即对ostream
对象的可修改引用),而不是复制或无效,原因是它允许链接,例如,std::cout
作为ostream
对象的常见示例:
unsigned int i = 2;
std::cout << "This is a test to print " << "some text and maybe some numbers: " << i << std::endl;
无符号整数i=2;
std::cout第一个原因:std::ostream
s通常不可复制(在C++11中,复制构造函数实际上是delete
d)。您无论如何都不想返回副本,因为链接不起作用:
std::stringstream s;
s << "String1" << "String2";
std::stringstream s;
s << "String1" << "String2";
assert(s.str() == "String1String2");
在这种情况下,s
将只保留“String1”
,因为当您通过std::ostream
的副本返回std::stringstream
时,返回的对象不再是std::stringstream
对象并调用操作符
std::stringstream s;
s << "String1" << "String2" << std::endl;
assert(s == "String1String2");