2010-07-03 69 views

回答

1

它聲明瞭這個類的兩個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))似乎要求該操作員是一個免費的功能。

3

這就像問爲什麼:

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

爲const char *重複兩次 - 有兩件事情比較。 _Tp1模板參數是存儲在堆棧中的東西的類型 - 兩個要比較的堆棧必須存儲相同的類型。

請注意閱讀標準庫的源代碼是而不是學習C++的好方法 - 你需要一本好書,比如this one

+0

從我對本書的快速瀏覽看來,本書似乎並沒有給出頭文件和impl源代碼。它會告訴你(詳細)如何使用這些標準庫。我瞭解了一些C++,並希望深入瞭解真實的源代碼,熟悉使用的習慣用法等等。但不確定這種方法。 – xyz 2010-07-03 16:58:55

+0

@learner不,它不會爲您提供庫源代碼 - 正如我所建議的那樣,檢查特定標準庫實現的源代碼不是學習如何使用該庫或關於常見C++習慣用法的好方法。一個簡單的例子 - 名字_Tp1在你自己的代碼中是非法的。 – 2010-07-03 17:05:09

+0

好的,謝謝尼爾。 – xyz 2010-07-03 17:07:22