Быстрый вопрос о стеке стандартной библиотеки C++
Что значит линия:
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 ответа
Он объявляет оператор равенства между двумя stack
Функция друга этого класса, которая необходима для доступа к закрытым членам.
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)), похоже, требует, чтобы этот оператор был свободной функцией.
Это все равно что спросить почему:
int strcmp( const char * a, const char * b );
const char * повторяется дважды - есть две вещи для сравнения. Параметр шаблона _Tp1 - это тип объекта, который хранится в стеке - оба сравниваемых стека должны хранить один и тот же тип.
Обратите внимание, что чтение исходного кода стандартной библиотеки не является хорошим способом изучения C++ - вам нужна хорошая книга, такая как эта.