C ++ principios básicos C.89: asegurar que el hash no produce una excepción

C.89: Hacer un picadillo noexcept

C.89: asegurar que el hash no produce una excepción

 

La razón (razón)

Los usuarios de los contenedores de hash hash usan de manera indirecta y no esperan un acceso sencillo a tirar. Es una biblioteca estándar 

 

 

 

requisito.

Usuario hash contenedores indirectamente usando una función hash, una simple operación anormal no deseable se produce. Este es un requisito de la biblioteca estándar.

 

 

 

Ejemplo, malo (muestra negativa)

 

template<>
struct hash<My_type> {  // thoroughly bad hash specialization
    using result_type = size_t;
    using argument_type = My_type;

    size_t operator() (const My_type & x) const
    {
        size_t xs = x.s.size();
        if (xs < 4) throw Bad_My_type{};    // "Nobody expects the Spanish inquisition!"
        return hash<size_t>()(x.s.size()) ^ trim(x.s);
    }
};

int main()
{
    unordered_map<My_type, int> m;
    My_type mt{ "asdfg" };
    m[mt] = 7;
    cout << m[My_type{ "asdfg" }] << '\n';
}

Si usted tiene que definir una especialización de hash, trate simplemente dejar que se combinan las especializaciones de hash estándar-biblioteca con ^ (XOR). Que tiende a funcionar mejor que "inteligencia" para los no especialistas.

Si ha definido Haxi Te de la lucha por implementado simplemente como XOR y normas Kuhaxite de la combinación.

 

 

Cumplimiento (Lograr recomendado)

 

  • Bandera tirar hashes.

  • Sugerencia de hash tirado.

 

 

Descripción del enlace

 

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c89-make-a-hash-noexcept

 


 

Creo que este artículo útil? pulgares de bienvenida ya compartir con más personas.

Leer artículos más actualizados, por favor preste atención a las micro-canal número público de pensamiento orientado a objetos []

Publicados 408 artículos originales · ganado elogios 653 · vistas 290 000 +

Supongo que te gusta

Origin blog.csdn.net/craftsman1970/article/details/104950687
Recomendado
Clasificación