c - 可以将套接字作为 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);
}
我脑子里的一些东西告诉我,我应该把它当作可写的记忆传递socket
,const
而不是传递给它。我知道套接字是文件描述符,所以我显然对它们如何工作以及它们是否总是或曾经被写入感到困惑。但是,我的代码在传递socket
为const
.
我的总体问题是:
可以传递类型SOCKET
对象为的变量const
吗?还是应该说SOCKET
无论范围如何都始终在可写内存中?
解决方案
将顶层添加const
到函数参数总是安全的。这甚至不是函数签名的一部分,它只是告诉编译器在函数体内你不会将参数更改为不同的值;这反过来又让编译器捕捉到您将重新分配参数的错误。
请注意,当您调用 时send
,第一个参数是接收参数的 a copy
(socket
也称为“按值传递”)。因此,是否socket
在可写内存中没有区别。
推荐阅读
- python - 多线性回归模型中的零值
- java - 如何将带有 @SpringBootApplication 的 maven 模块添加到另一个 maven 模块作为测试范围内的依赖项
- firebase - 由于 cloud firestore 和 firebase auth 错误,我的 Flutter 应用程序不再编译
- minecraft-forge - 放置块时使用平铺实体复制块对象
- javascript - 保证最终订单
- reactjs - 根据变量先前值反应 useState 更新
- python - 如何让 Django 管理页面的用户控制哪些 list_display 字段可见?
- r - mtc.network 错误“`levels<-`(`*tmp*`, value = as.character(levels)) 中的错误:因子级别 [5] 重复”
- python - 使用 map() 将具有多个变量的函数应用于列表的最简洁方法?
- powershell - 如何使用 Powershell 从文本中创建数字?