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在論證列表中重複兩次? 謝謝,
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在論證列表中重複兩次? 謝謝,
它聲明瞭這個類的兩個stack
s之間的相等運算符,它是訪問私有成員所必需的。
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++的好方法 - 你需要一本好書,比如this one。
從我對本書的快速瀏覽看來,本書似乎並沒有給出頭文件和impl源代碼。它會告訴你(詳細)如何使用這些標準庫。我瞭解了一些C++,並希望深入瞭解真實的源代碼,熟悉使用的習慣用法等等。但不確定這種方法。 – xyz 2010-07-03 16:58:55
@learner不,它不會爲您提供庫源代碼 - 正如我所建議的那樣,檢查特定標準庫實現的源代碼不是學習如何使用該庫或關於常見C++習慣用法的好方法。一個簡單的例子 - 名字_Tp1在你自己的代碼中是非法的。 – 2010-07-03 17:05:09
好的,謝謝尼爾。 – xyz 2010-07-03 17:07:22