考虑以下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 <<
和operator >>
吗?如果是这样,为什么?
答案 0 :(得分:5)
iostream最重要的一个方面是它是可扩展的。您可以添加新类型,您需要做的就是为写入提供重载<<
,并为阅读提供>>
。
您需要为可变参数版本提供类似的机制。
您必须提供一些全局或命名空间范围的函数名称,这些函数名称将由istream::read
和ostream::write
的依赖于参数的查找调用。该函数的名称需要明确定义。但是你根本不会在cin.read(a,b,c);
中找到该函数的名称。除非是read
,否则在这种情况下你会遇到许多潜在的名称冲突问题。
这种机制不如重载operator<<
那么明显。您需要查找文档以了解编写重载的函数的名称是什么,而operator<<
就在语句中:cout << ...
。