Char ポインターのストリーム演算子のオーバーロードについて
printf() を使用して文字ポインターを出力する場合、変換指定子はアドレスか、アドレスの場合は %u、文字列の場合は %s など、文字列が出力されます。しかし、C ストリームと cout では、どちらを出力するかをどのように決定するのでしょうか?
次のコードを考えてみましょう:
<code class="cpp">char ch = 'a'; char *cptr = &ch; cout << cptr << endl;
この例では、cout は cptr を文字列として解釈しようとします。 cout を使用して ch のアドレスを出力するには、この曖昧さを解決するために変換を適用する必要があります。
解決策: Void ポインターへのキャスト
cout を使用したアドレスは型キャストによるものです。正しいアプローチは次のとおりです:
<code class="cpp">cout << static_cast<void *>(cptr) << endl;</code>
cptr を void * にキャストすることで、cout に void ポインター (ostream& 演算子<< (ostream& o, const void *p) を受け取る適切なオーバーロードを強制的に実行させます。 ))。これにより、住所が意図したとおりに印刷されます。
以上が文字ポインタを渡すときに、`cout` はアドレスを出力するか文字列を出力するかをどのように決定するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。