Why should C++ ensure that the hash will not throw an exception?
This article mainly introduces "why C++ should ensure that the hash will not throw an exception". In the daily operation, I believe that many people have doubts about why C++ should ensure that the hash will not throw an exception. The editor looked up all kinds of data and sorted out a simple and easy-to-use method of operation. I hope it will be helpful to answer the doubt that "why should C++ ensure that the hash will not throw an exception?" Next, please follow the editor to study!
C.89: make sure that the hash does not throw an exception
Reason (reason)
Users of the hash container indirectly use the hash function and do not want an exception to occur in a simple operation. This is the requirement of the standard library.
Example, bad (negative example)
Template
Struct hash {/ / 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 () (x.s.size ()) ^ trim (x.s)
}
}
Int main ()
{
Unordered_map m
My_type mt {"asdfg"}
M [mt] = 7
Cout