(void *)1是什么意思?

伊夫:

我正在阅读ROS的代码

在文件中ros_comm/roscpp/include/ros/subscriber.h,我看到了这样的一段代码:

operator void*() const { return (impl_ && impl_->isValid()) ? (void*)1 : (void*)0; }

好吧,(void *)0可以看作是NULLC语言,但这是什么(void *)1意思呢?

如果一个类Foo包含此函数,则意味着我们可以这样编写代码:

Foo foo;
void *ptr = foo;

对?那么这是否意味着void *ptr = (void *)1可能?这是什么意思?

Miles Budnek:

这是避免在C ++ 11中引入上下文转换bool之前隐式转换到from的问题的老技巧explicit它旨在用于检查有效性:

Subscriber my_subscriber = someFunction();
if (!my_subscriber) {
    // error case
}

重要的一点是,不存在从void*到整数类型的内置转换,但是确实存在从bool到整数类型的转换。同时void*bool存在的内置转换这意味着,如果您定义了对的隐式转换bool,那么以下内容将非常有效:

void my_func(int i);

void another_func() {
    Subscriber sub = something();
    my_func(sub);
}

定义转换可void*避免该问题。


如今,这种技巧已经过时了。C ++ 11引入了explicit转换。和循环的条件下考虑到的explicit转换,但在其他有问题的情况下则不考虑转换。这意味着这些天的转换应写为:boolif

explicit operator bool() const { return impl_ && impl_->isValid(); }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

空void main()的程序的退出代码是什么意思?

“ javascript:void(0)”是什么意思?

在void方法结束时return是什么意思?

decltype(void())中的void()到底是什么意思?

void *是什么意思,以及如何使用它?

public <T> void run(T object){}是什么意思?

(void)在C ++中是什么意思?

`((void(*)())0x1000)();是什么意思?

((void(*)(int))-1)是什么意思?

打字稿中的“ void”是什么意思?

(void)sizeof(0 [array])是什么意思?

in:if(test ==(void *)-1)中的“(void *)”是什么意思

TypeScript中的Fat arrow函数之后的“ void =()=> {}”是什么意思?

`circle:(null:?{setNativeProps(props:Object):void})是什么意思

在C ++中,“ class classname * funcname(void)”是什么意思?

Swift:“ completionHandler:((Bool)-> Void)”是什么意思?

“ void SomeFunction(int,void *)”是什么意思?

“ typedef void(^ Something)()”是什么意思

“ void fatal(char *);”是什么意思?

“ typedef void *(* Something)(unsigned int)”是什么意思

c中的*(volatile void **)是什么意思?

void(*)()在代码中是什么意思

C中的typedef void * key_type是什么意思?

“在签名中非法使用'void'类型”是什么意思?

C中的“ static void *”是什么意思?

打字稿或角度语法methondName(): void{ } 是什么意思?(代码内)

{handleButton}: {handleButton:()=>void} 在示例中是什么意思

void Enter() = 0 是什么意思;在 C# 中是什么意思?

'(void) (_p)' 是什么意思