在C++11标准中,我不明白为什么要取地址nullptr
是不允许的,而一个is允许使用自己的地址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
动态分配一个地址以进行比较等?或者(可能更有可能)编译器可能强制底层对象的临时副本?
当然,这些都不是重要的信息,我只是觉得有趣的是为什么要实施这个特定的限制(以及为什么我会看到我的行为)。
和无法获取地址是一样的5
即使你可以获取一个地址int
赋予它值后5
。没有其他价值并不重要nullptr_t
具有。
值没有地址;物体确实如此。
当您将这样的值传递给 a 时,会生成一个临时对象const &
参数,或者以其他方式将值绑定到 const 引用,例如通过static_cast< T const & >( … )
或声明一个命名引用T const & foo = …;
。您看到的地址是临时地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)