C++ 11標準では、自分のインスタンスのアドレスを取得できるのに、のアドレスを取得することがnullptr
許可されていない理由がわかりません。予約済みのキーワードであるという事実を除けば、この決定には特定の理由がありますか?std::nullptr_t
nullptr
単に私を楽しませるために、次の関数を使用してこの制限を回避しようとしました。
decltype(nullptr)* func(const decltype(nullptr) &nref) noexcept
{
return const_cast<decltype(nullptr)*>(reinterpret_cast<const decltype(nullptr)*>(&nref));
}
reinterpret_cast
パラメータがないとヒステリックなエラーが発生するため、パラメータを使用する必要がありました。
error: invalid conversion from 'std::nullptr_t*' to 'std::nullptr_t*' [-fpermissive]
nullptrを直接渡してこの関数を呼び出すと、毎回異なるアドレスが取得されます。nullptr
比較などのためにジャストインタイムで動的にアドレスが割り当てられますか? または (おそらくより可能性が高い) コンパイラは、基になるオブジェクトの一時的なコピーを強制していますか?
もちろん、これはどれも重要な情報ではありません。なぜこの特定の制限が実装されたのか (そして、なぜ私が今のような行動を見ているのか) が興味深いと思います。