在“函数名称”操作符后面输入参数 <T>

以下两个片段有什么区别?

  1. 使用<T>for 运算符 <<
template<typename T>
class Stack {
...
friend std::ostream& operator<< <T> (std::ostream&,
Stack<T> const&);
};
  1. 没有 <T>
template<typename T>
class Stack {
...
friend std::ostream& operator<< (std::ostream&,
Stack<T> const&);
};

回答

在#1,编译器会查找调用的函数模板operator<<,从而operator<< <T>给了精确的签名,以及类Stack<T>将只交好特定专业化。

在#2 中,编译器将查找具有给定精确签名的非模板函数operator<<。如果找到了这样的功能,Stack<T>就会和它成为朋友。如果找不到这样的函数,则声明该函数(但这是一个有问题的情况,因为没有办法对它进行一般定义)。


以上是在“函数名称”操作符后面输入参数 &lt;T&gt;的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>