2

考虑以下 C++ 代码:

A a = ...;
B b = ...;
C c = ...;

cin >> a >> b >> c;
...
cout << a << b << c;

现在我们有了 C++11 可变参数模板函数(我认为),它可以通过以下方式之一实现:

cin.read(a,b,c);
cout.write(a,b,c);

read(cin,a,b,c);
write(cout,a,b,c);

cin(a,b,c);
cout(a,b,c);

<<与这些方式相比,链式操作符有什么优势吗?换句话说 - 你认为如果他们一开始就有可变参数模板函数,他们仍然会使用operator <<andoperator >>吗?如果是这样,为什么?

4

1 回答 1

5

iostreams 最重要的方面之一是它是可扩展的。您可以添加新类型,您需要做的就是<<为写入和>>读取提供重载。

您需要为可变参数版本提供类似的机制。

您必须提供一些全局或命名空间范围的函数名称,这些函数名称将由istream::readand的参数相关查找调用ostream::write。此函数的名称需要明确定义。但是您根本找不到该函数的名称cin.read(a,b,c);。除非它是read,在这种情况下,您会遇到许多潜在的名称冲突问题。

这种机制不如重载那么明显operator<<。您需要查看文档以了解要为其编写重载的函数的名称是什么,whileoperator<<就在语句中:cout << ....

于 2012-08-05T22:42:10.727 回答