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