私はおそらく次のようなものを書くでしょう:
return const_cast<void*>(""); // non-null pointer, referand doesn't matter
おそらく、コールバック関数には、nullでないことが保証されたポインター入力があります。もしそうなら、あなたはそれを返すことができます。
reinterpret_cast<void*>(1)
動作が保証されていないため、見た目は醜いはずです。ほとんどのアーキテクチャはそれを気にしませんが、
- この標準は、オブジェクトのアドレス(またはnullポインター、または配列の1回限り)ではないポインター値を使用できることを実際に保証するものではありません。
- 標準は
reinterpret_cast<void*>(1)
、それがnullポインターではなく、実装定義であることを保証しません。
関数が誤ってnullを返す実装があるとは思えませんが、それは可能です。CPU自体のアドレス指定が8ビットではなく4ビットである架空の実装を想像してみてください。もちろん、実装者は引き続きを選択CHAR_BIT == 8
し、C++のすべてのポインターは8ビットで整列されます。次に、実装は、ビットパターンを変更せずにポインタから整数に、最後のビットをゼロにすることで整数からポインタに合法かつかなり合理的にマッピングできます。または、1ビット右シフトおよび左シフトすることもできます。標準では、ポインタ->整数->ポインタが元の値を復元する必要がありますが、整数->ポインタ->整数が復元する必要はありません。