-3

重複の可能性:
(char *) x または (void *) z とはどういう意味ですか?

私は C++ ファイルで作業しており、次の行に遭遇しました:

tmp.sort(Hash::pairval, printPair, (void *)(tmp.bitSize()));

(void *) の意味がよくわかりません。bitsize() は関数であり、以前に関数ポインターを渡すという用語を聞いたことがあります。これって、あれですか?

:: は通常、.cpp/.h オブジェクト型ファイルで見たスコープ解決演算子であることを知っています。ここで、pairval が Hash にあると述べることは、同じ目的を果たしていると思います。

ありがとう

4

3 に答える 3

0

(void *) は、単純に tmp.bitSize() の戻り値を void ポインター型にキャストしています。キャストは、C++ や c でも非常に一般的な操作です。

于 2012-10-22T16:34:04.080 に答える
0

(void *) の意味がよくわかりません。bitsize() は関数であり、以前に関数ポインターを渡すという用語を聞いたことがあります。これって、あれですか?

いいえ。括弧tmp.bitSize()は、呼び出されて値を返す関数呼び出し式であることに注意してください。したがって、ここには関数ポインタは含まれていません。

次に、戻り値は、そのようなポインターを期待する関数に渡されるために、void へのポインター型 (つまり、キャッチオール「何かへのポインター」型) にキャストされます。

なぜ誰かがビット サイズ (数値のように見える) をポインターに変換するのか、私にはわかりません。これは疑わしいことと正しくないことの間のどこかです。

C++ でのキャストについて読んでください。C スタイルのキャストはお勧めできません。厳密なエイリアシング ルールvoid*があるため、へのキャストはほとんど役に立たず、多くの場合危険です。

:: は通常、.cpp/.h オブジェクト型ファイルで見たスコープ解決演算子であることを知っています。ここで、pairval が Hash にあると述べることは、同じ目的を果たしていると思います。

そのとおりです。

于 2012-10-22T16:37:58.550 に答える
0

Hash::pair

ほとんどの場合、クラスの静的メンバーへの呼び出しHashです。

その(void*)部分は、tmp.bitSize()おそらく何らかの値を返す void ポインターへのキャストです。したがって、関数ポインタはありません。

于 2012-10-22T16:35:25.297 に答える