3

私は現在、C++ アプリケーションを Windows と Linux の両方でコンパイルできるようにする作業を行っています。

std::this_thread::get_id().hash()

Linux では gcc 4.8 ではコンパイルされません (このスレッドのコメントに感謝します)。これに対する推奨される修正は、次を使用することでした。

std::hash<std::thread::id>()(std::this_thread::get_id())

これらが同じ出力を生成するかどうかは誰にもわかりますか?

4

2 に答える 2

0

std::thread::id::hash()私が知る限り、標準にはありません。したがって、おそらく拡張または実装の詳細です。そのため、その動作は明らかに実装定義になります。

std::hash<std::thread::id>()(std::this_thread::get_id())規格にあります。

複数のシステムでスレッドを持つことはできず、.hash()移植可能なコードで呼び出すこともできないため、残っているのは、一部のプラットフォーム固有のモジュールが を使用し.hash()、一般的なコードが を使用する可能性ですstd::hash。健全性に依存し.hash()て同じであると推測するか、プラットフォーム固有のモジュールを一掃することができます。私は自分でスイープに行きます。

于 2014-12-11T16:23:25.313 に答える