1
ostream& operator<<(ostream& os, const PT& p)
{
   os << "(" << p.x << "," << p.y << ")";
}

PT是一个结构,x,y是它的成员。
有人可以解释一下上面的行到底是做什么的。无法使用 打印所需的文本cout

我从这个网站发现了这段代码。

4

4 回答 4

4

operator<<. _

这意味着你可以这样做:

PT p = ...;
std::cout << p << "\n";

或这个:

PT p = ...;
std::stringstream ss;
ss << p << "\n";
std::cout << ss;

或许多其他有用的东西。

但是,应该注意,您引用的代码将无法正常工作。它需要返回os

于 2012-06-16T15:19:33.947 回答
1

这提供了一种输出 PT 的方法。现在,您可以使用它:

PT p;
std::cout << p;

这被翻译成调用

operator<< (std::cout, p);

这与您的重载相匹配,因此它可以工作,在括号中打印 x 和 y 值,而用户的工作量更少。事实上,它不必是cout。它可以是任何“是” a std::ostream。有很多东西继承自它,这意味着它们也是std::ostreams ,所以这也适用于它们。std::ofstream,对于文件 I/O,就是一个例子。

您找到的样本没有做但应该做的一件事是return os;. 不这样做,你不能说std::cout << p << '\n';,因为打印的结果p不会返回cout给你用来打印换行符。

于 2012-06-16T15:19:32.650 回答
0

它允许 << 运算符将 PT 对象附加到流中。似乎该对象具有添加了逗号分隔符的元素 x 和 y。

于 2012-06-16T15:20:22.570 回答
0

此运算符<<重载用于输出 PT 类的对象。

这里:

ostream& operator<<(ostream& os, const PT& p)

第一个参数用于将附加p的输出流。它返回对os的引用以进行如下链接:

cout << pt << " it was pt" << endl;
于 2012-06-16T15:23:24.853 回答