void Link::keepalive(bool enable){
int opt = enable? 1 : 0;
::setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, (void *)&opt, sizeof(opt));
}
我不断看到这样特别是当它涉及到插座和网络操作在一些比较低级的C函数下面的代码。为什么被引用的int被转换为void指针?
我来自一个python背景,并且我确定四处寻找好的解释,说明(void *)&opt
正在做什么,但还没有找到一个好的解释。
我得到的引用仅仅是有限制的指针。
'(void *)'被称为''cast'',它基本上表明指针('opt'变量的地址)应该被看作是指向'void'数据类型的指针。在大多数情况下,在'C'中,这不是必需的或冗余的。 –
在C++中,你应该使用'reinterpret_cast'。 – 101010
'&opt'不是引用,并且在C/C++中不需要强制转换。 – yngccc