ostream& operator<<(ostream& os, const PT& p)
{
os << "(" << p.x << "," << p.y << ")";
}
PT
是一个结构,x
,y
是其成员
有人可以解释上面这行是什么。无法使用cout
打印所需的文字?
我从this site找到了这段代码。
答案 0 :(得分:4)
operator<<
是custom overload。
这意味着你可以这样做:
PT p = ...;
std::cout << p << "\n";
或者这个:
PT p = ...;
std::stringstream ss;
ss << p << "\n";
std::cout << ss;
或许多其他有用的东西。
但是,应该注意您引用的代码无法正常工作。它需要返回os
。
答案 1 :(得分:1)
这提供了输出PT的方法。现在,你可以使用它:
PT p;
std::cout << p;
这被转换为
的调用operator<< (std::cout, p);
匹配您的重载,因此它可以正常工作,在括号中打印x和y值,而不需要用户的努力。实际上,它不一定是cout
。它可以是“是”std::ostream
的任何东西。有很多东西可以从它继承,这意味着它们也是std::ostream
,所以这也适用于它们。 std::ofstream
,对于文件I / O,就是一个例子。
您发现的样本没有做的一件事,但应该是return os;
。如果不这样做,则无法说出std::cout << p << '\n';
,因为打印p
的结果不会返回cout
,您无法使用它来打印换行符。
答案 2 :(得分:0)
它允许&lt;&lt;运算符将PT对象附加到流。看来该对象具有用逗号分隔符添加的元素x和y。
答案 3 :(得分:0)
此运算符&lt;&lt; 重载以输出PT类的对象。
下面:
ostream& operator<<(ostream& os, const PT& p)
第一个参数用于输出流,其中将附加 p 。 它将引用返回到 os 以进行链接:
cout << pt << " it was pt" << endl;