考虑以下C++代码:
A a = ...;
B b = ...;
C c = ...;
cin >> a >> b >> c;
...
cout << a << b << c;
Run Code Online (Sandbox Code Playgroud)
既然我们有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);
Run Code Online (Sandbox Code Playgroud)
链式<<运算符在这些方面有什么优势吗?换句话说-你想,如果他们有他们仍然会用在一开始可变参数模板的功能operator <<和operator >>?如果是这样,为什么?
iostream最重要的一个方面是它是可扩展的.您可以添加新类型,您需要做的就是<<为写入和>>阅读提供重载.
您需要为可变参数版本提供类似的机制.
您必须提供一些全局或命名空间范围的函数名称,这些函数名称将由依赖于参数的查找istream::read和调用ostream::write.该函数的名称需要明确定义.但你根本找不到该功能的名称cin.read(a,b,c);.除非是这样read,在这种情况下,你会遇到许多潜在的名称冲突问题.
这种机制比重载更不明显operator<<.您需要查找文档以了解写入重载的函数的名称是什么,而operator<<在语句中就是这样:cout << ....