首页 > 解决方案 > 可以将套接字作为 const 传递给函数吗?

问题描述

假设我有一个名为socket. 如果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);
}

我脑子里的一些东西告诉我,我应该把它当作可写的记忆传递socketconst而不是传递给它。我知道套接字是文件描述符,所以我显然对它们如何工作以及它们是否总是或曾经被写入感到困惑。但是,我的代码在传递socketconst.

我的总体问题是:

可以传递类型SOCKET对象为的变量const吗?还是应该说SOCKET无论范围如何都始终在可写内存中?

标签: cwindowssocketswinsockfile-descriptor

解决方案


将顶层添加const到函数参数总是安全的。这甚至不是函数签名的一部分,它只是告诉编译器在函数体内你不会将参数更改为不同的值;这反过来又让编译器捕捉到您将重新分配参数的错误。

请注意,当您调用 时send,第一个参数是接收参数的 a copysocket也称为“按值传递”)。因此,是否socket在可写内存中没有区别。


推荐阅读