彼らは完全に冗長に見えるように私はただ、彼らはpkt << uint32(0)
を使用する理由を把握しようとしている私は現在、オープンソースのサーバーのためのGoogleの認証を実装しようとしていると、彼らはコード左シフトのポイントは0ですか?
if (securityFlags & 0x01) // PIN input
{
pkt << uint32(0);
pkt << uint64(0) << uint64(0); // 16 bytes hash?
// This triggers the 2 factor authenticator entry to popup on the client side
}
if (securityFlags & 0x02) // Matrix input
{
pkt << uint8(0);
pkt << uint8(0);
pkt << uint8(0);
pkt << uint8(0);
pkt << uint64(0);
}
if (securityFlags & 0x04) // Security token input
{
pkt << uint8(1);
}
のこの小さなビットを持っています私に。そして、彼らはまたそれを何度も使っています。それはずっと意味がありません。
なぜコードがそのように書かれたのですか?
私はあなたの質問を正しく理解していないと思いますが、私の編集をロールバックしてください。 – Rakete1111
呼び出しは、コンパイラがオーバーロードされたバージョンの「<<」演算子を使用する必要があるかどうかをコンパイラに知らせるのを助けています。リテラル '0'は、intやunsigned intを含む多くの型に暗黙的に変換できます。明示的な変換を使用する場合は、コンパイラーにリードし、一致するシグニチャーでオーバーロードを呼び出すことができます。これは、コンパイラが何をすべきか分からず、あいまいな関数呼び出しコンパイルエラーで終了する場合に役立ちます。 – ccpgh
詳細については、http://stackoverflow.com/questions/6233132/c-compiler-error-ambiguous-call-to-overloaded-functionを参照してください。 – ccpgh