空指针与 int 等价

发布于 2024-08-08 20:47:19 字数 251 浏览 2 评论 0原文

Bjarne 在《C++ 编程语言》中写道,空指针与整数零不同,但 0 可以用作空指针的指针初始值设定项。这是否意味着:

void * voidPointer = 0;
int zero = 0;
int castPointer = reinterpret_cast<int>(voidPointer);
assert(zero == castPointer) // this isn't necessarily  true

In "The C++ Programming Language", Bjarne writes that the null pointer is not the same as the integer zero, but instead 0 can be used as an pointer initializer for a null pointer. Does this mean that:

void * voidPointer = 0;
int zero = 0;
int castPointer = reinterpret_cast<int>(voidPointer);
assert(zero == castPointer) // this isn't necessarily  true

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪落纷纷 2024-08-15 20:47:19

是的,这意味着 castPointer 不一定为零,并且断言可能会失败。因为虽然空指针常量为零,但某些类型的空指针不一定是所有位都为零的地址。

在将空指针转换为 int 时,reinterpret_cast 没有特殊的规定来产生零。您可以通过使用布尔运算符来实现此目的,该运算符将使用 01 初始化变量:

int castPointer = (voidPointer != 0);

Yes, that means that castPointer isn't necessarily zero, and the assert may fail. Because while the null pointer constant is zero, the null pointer of some type is not necessarily an address with all bits zero.

reinterpret_cast has no special provisions to yield zero when casting a null pointer to int. You can achieve that by using boolean operators, which will initialize the variable with either 0 or 1:

int castPointer = (voidPointer != 0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文