Быстрый вопрос о стеке стандартной библиотеки 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++ - вам нужна хорошая книга, такая как эта.

Другие вопросы по тегам