問題タブ [stdhash]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - std::hash ではない理由char* に特化した?
C++ 標準が、、、などにstd::hash<T>
特化したことを指定しないのはなぜですか? つまり、終端の null が見つかるまで、C 文字列の内容をハッシュします。char*
const char*
unsigned char*
const unsigned char*
std
自分の特殊化を自分のコードの名前空間に挿入することに害はありますか?
c++11 - std::hash がオーバーロードされた関数ではないのはなぜですか?
std::hash
オーバーロードされた関数の解決中に行われる暗黙的な型変換を避けるために、テンプレート構造体として定義されていると思います。言うのは正しいことですか?
つまり、私は書くことを好むだろう
それ以外の
しかし、標準化委員会が 2 番目のオプションを選択したのには理由があると思います。
c++ - std::hash をオーバーライドできますか?
の実際の実装をC++ 11std::hash
の独自の定義に置き換えることができますか?std::hash
標準ライブラリには触れずに、私のコードベースからという意味です。
この場合、仮想関数/ポリモーフィズムの使用は見られないので、とにかく std::hash の定義を変更できないと思いますか?
c++ - std::hash を使用して関数ポインタをハッシュできますか?
std::hash
関数ポインターのハッシュにC++11 型を使用できますか? hash
次のように定義された部分的な特殊化があります。
しかし、関数ポインターは C++ の他のポインター型とは異なるため (たとえば、 にキャストすることはできません)、やvoid*
のような型に使用しても安全かどうかはわかりません。int(*)()
void(*)(int, int)
これは許可されていますか?新しい ISO 仕様に、これを支持または反論する特定の文言はありますか?
ありがとう!
c++ - std::hash アルゴリズムとサイズ
私は C++11 と std::hash アルゴリズムを使用しています。私は、実際にどのハッシュ実装が使用されているのだろうかと思っていました。MD5 または SHA だと思いますが、インターネットから情報を掘り下げることはできません。
また、MySQL に格納する必要があるため、実際に返されるハッシュのビット幅を知りたいです。
最後に、 crypto++ などの他のライブラリよりも std::hash を使用することをお勧めしますか?
c++ - std::hash が関数ではなく構造体であるのはなぜですか?
標準ライブラリは std::hash をさまざまな型に特化したテンプレート構造体として実装します。次のように使用されます。
私の質問は、このデザインの選択の背後にある理由は何ですか. テンプレート関数として実装されず、次のように使用される理由:
c++11 - std::hash の派生クラスへの特殊化
Hashable
ハッシュ可能なクラスの派生元となる抽象基本クラスがあります。std::hash
から派生するすべてのクラスに拡張したいと思いますHashable
。
次のコードはまさにそれを行うことになっています。
上記のコードは gcc 4.8.1 では期待どおりに動作しますが、gcc 4.7.2 でコンパイルしようとすると、次のようになります。
gcc 4.7.2std::hash
から派生した任意のクラスでこの特殊化を機能させる方法を考えられる人はいますか?Hashable