【发布时间】:2019-11-19 14:29:15
【问题描述】:
我正在阅读ROS的代码。
在ros_comm/roscpp/include/ros/subscriber.h文件中,我看到了这样一段代码:
operator void*() const { return (impl_ && impl_->isValid()) ? (void*)1 : (void*)0; }
嗯,(void *)0在C中可以看成NULL,但是(void *)1是什么意思呢?
如果一个类Foo包含这个函数,说明我们可以这样编码:
Foo foo;
void *ptr = foo;
对吗?那么这是否意味着void *ptr = (void *)1 是可能的?这是什么意思?
【问题讨论】:
-
它将 1 转换为指针,将 0 转换为指针。就是这样。
-
这是一个 c 风格的演员表。因此,它将 1 转换为
void *。至于你为什么要这样做,或者这有什么实际用途,不要问我。如果可以,请询问原始程序员,或者这里有其他人可以阐明这个问题。 -
它可能用于定位地址为
1的内存单元中的内容。不过我们不知道,请问那些运行图书馆的人。 -
可能使用指针作为 bool 隐式转换。在现代 C++(C++11 及更高版本)中你不会这样做。
-
我在这里查看过:github.com/ros/ros_comm/blob/melodic-devel/clients/roscpp/… 我没有看到任何地方使用的演员表。也许它是隐式使用的,但要搜索的内容很多.. 不知道..
标签: c++ casting type-conversion ros typecasting-operator