关于C ++标准库的堆栈impl的一个快速问题

时间:2010-07-03 16:09:57

标签: c++ stl gnu

该行:

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在争论列表中重复两次? 谢谢,

2 个答案:

答案 0 :(得分:3)

这就像在问:

int strcmp( const char * a, const char * b );

const char *重复两次 - 有两件事要比较。 _Tp1模板参数是存储在堆栈中的事物的类型 - 被比较的两个堆栈必须存储相同的类型。

请注意,阅读标准库来源是学习C ++的好方法 - 您需要一本好书,例如this one

答案 1 :(得分:1)

它声明此类的两个stackfriend 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))似乎要求此运算符是一个自由函数。