假设我有一个名为socket的windows套接字。如果socket被传递给一个不写它的函数。例如,假设一个函数向客户端发送一个简单的消息/字节,比如Hello you're connected to the server!。例如:
void send_hello(SOCKET socket, char* data) {
send(socket, data, sizeof(data), 0);
}将套接字作为const传递安全吗?例如:
void send_hello(const SOCKET socket, char* data) {
send(socket, data, sizeof(data), 0);
}我大脑中的一些东西告诉我,我应该将socket作为const传递,而不是将它作为可写内存传递。我知道套接字是文件描述符,所以我显然很困惑它们是如何工作的,以及它们是否总是或曾经被写入。但是,我的代码在将socket作为const传递时工作。
我的整体问题是:
是否可以将类型为SOCKET对象的变量传递为const?或者应该说SOCKET总是在可写内存中,而不管范围如何?
发布于 2020-11-11 00:55:55
SOCKET只是一个整数(具体来说,SOCKET是UINT_PTR的别名,即指针大小的无符号整数),所以在您的示例中如果将它作为const传递并不重要,因为您是通过值传递它的。send()通过非const值获取SOCKET,因此无论什么情况,SOCKET都会被值复制。
如果您愿意,可以通过socket参数传递您的const参数,这只意味着您的函数不能为socket参数分配新的值。它与SOCKET引用的基础套接字资源无关。
https://stackoverflow.com/questions/64778130
复制相似问题