该行:
template<typename _Tp1, typename _Seq1>
friend bool
operator==(const stack<_Tp1, _Seq1>&, const stack<_Tp1, _Seq1>&);
http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.4/a01367.html 中的
办?
为什么_Tp1在争论列表中重复两次? 谢谢,
答案 0 :(得分:3)
这就像在问:
int strcmp( const char * a, const char * b );
const char *重复两次 - 有两件事要比较。 _Tp1模板参数是存储在堆栈中的事物的类型 - 被比较的两个堆栈必须存储相同的类型。
请注意,阅读标准库来源不是学习C ++的好方法 - 您需要一本好书,例如this one。
答案 1 :(得分:1)
它声明此类的两个stack
和friend function之间的相等运算符,这是访问私有成员所必需的。
const stack<_Tp1, _Seq1>
出现两次,因为有2个参数。
当然可以写成
bool operator==(const stack<_Tp1, _Seq1>& y) const { return c == y.c; }
但是C ++标准(§[stack.ops](23.3.5.3.4))似乎要求此运算符是一个自由函数。