次のような不完全なサーバーのコードを指定します。
enum class Command : uint32_t {
LOGIN,
MESSAGE,
JOIN_CHANNEL,
PART_CHANNEL,
INVALID
};
Command::LOGIN
整数に変換すると常に同じ値になると期待できますか?
- コンパイラ間で?
- コンパイラのバージョン間で?
- 別の列挙を追加すると?
- 列挙を削除すると?
変換Command::LOGIN
は次のようになります。
uint32_t number = static_cast<uint32_t>(Command::LOGIN);
私がここでやっていることに関するいくつかの追加情報。この列挙は、それをサーバー/クライアントに送信する整数に変換することにより、ネットワークに供給されます。数値が常に同じである限り、数値が何であるかは特に気にしません。同じままではない場合は、明らかに、通常の方法で自分の番号を提供する必要があります。
現在、コードのコンパイルに使用されたコンパイラによって変わるのではないかとこっそり疑っていますが、確実に知りたいです。
おまけの質問: コンパイラ/言語は、どの番号を使用するかをどのように決定しCommand::LOGIN
ますか?
この質問を送信する前に、たとえば 3137527848 から 0 へ、またはその逆に変更されていることに気付きました。この数がどのように決定され、その数がどのように、またはなぜ変化しているのかについて、私はまだ興味があります。