在 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
为比较等即时动态分配地址?或者(可能更有可能)编译器是否强制底层对象的临时副本?
当然,这些都不是重要信息,我只是觉得有趣的是为什么要实施这个特定的限制(以及随后为什么我会看到我的行为)。