const char*的全特化

单身喵發表於2024-06-21

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這個關鍵字還是要好好注意啊。

相關文章