Небольшой вопрос о стеке стандартной библиотеки C ++ - PullRequest
0 голосов
/ 03 июля 2010

Что означает строка:

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 ]

3 голосов
/ 03 июля 2010

Это все равно что спрашивать, почему в:

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

const char * повторяется дважды - есть две вещи для сравнения.Параметр шаблона _Tp1 - это тип вещей, которые хранятся в стеке - оба сравниваемых стека должны хранить один и тот же тип.

Обратите внимание, что чтение источника из стандартной библиотеки не - хороший способизучения C ++ - вам нужна хорошая книга, такая как эта .

1 голос
/ 03 июля 2010

Он объявляет оператор равенства между двумя stack с функцией друга этого класса, который необходим для доступа к закрытым членам.

const stack<_Tp1, _Seq1> появляется дважды, потому что есть 2 аргумента.

Конечно, это можно записать как

bool operator==(const stack<_Tp1, _Seq1>& y) const { return c == y.c; }

но стандарт C ++ (& sect; [stack.ops] (23.3.5.3.4)), похоже, требует, чтобы этот оператор был свободной функцией.

...