const char*的全特化
今天再寫雜湊表時使用了模板,想要對C風格字串進行模板全特化時卻遇到了這個問題:
size_t Hash(const Type& key) const; // 宣告
// 定義
template <>
size_t HashTblSP<const char*>::Hash(const const char*& key) const
{
size_t hashValue;
for (hashValue = 0; *key != '\0'; hashValue = (hashValue << 5) + *key++);
return hashValue % m_HashTable.size();
}
在宣告中使用的是引用傳遞,於是我想著將形參寫為const const char*&
型別,但編譯器報出宣告與定義不相容,那便是形參錯了。仔細想一想改為了const char* const&
,因為宣告中傳入的是常量左值引用,也就是內容不能更改的原實參,將模板特化為指標,那麼宣告中的const
便是修飾指標,也就是指標常量指標的指向不能改變。第一次遇到這種情況,來記錄記錄,果然const
這個關鍵字還是要好好注意啊。