首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以将套接字传递给作为const的函数吗?

可以将套接字传递给作为const的函数吗?
EN

Stack Overflow用户
提问于 2020-11-10 23:10:25
回答 2查看 669关注 0票数 0

假设我有一个名为socket的windows套接字。如果socket被传递给一个不写它的函数。例如,假设一个函数向客户端发送一个简单的消息/字节,比如Hello you're connected to the server!。例如:

代码语言:javascript
运行
复制
void send_hello(SOCKET socket, char* data) {
    send(socket, data, sizeof(data), 0);
}

将套接字作为const传递安全吗?例如:

代码语言:javascript
运行
复制
void send_hello(const SOCKET socket, char* data) {
    send(socket, data, sizeof(data), 0);
}

我大脑中的一些东西告诉我,我应该将socket作为const传递,而不是将它作为可写内存传递。我知道套接字是文件描述符,所以我显然很困惑它们是如何工作的,以及它们是否总是或曾经被写入。但是,我的代码在将socket作为const传递时工作。

我的整体问题是:

是否可以将类型为SOCKET对象的变量传递为const?或者应该说SOCKET总是在可写内存中,而不管范围如何?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-10 23:16:08

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

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

票数 2
EN

Stack Overflow用户

发布于 2020-11-11 00:55:55

SOCKET只是一个整数(具体来说,SOCKETUINT_PTR的别名,即指针大小的无符号整数),所以在您的示例中如果将它作为const传递并不重要,因为您是通过值传递它的。send()通过非const值获取SOCKET,因此无论什么情况,SOCKET都会被值复制。

如果您愿意,可以通过socket参数传递您的const参数,这只意味着您的函数不能为socket参数分配新的值。它与SOCKET引用的基础套接字资源无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64778130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档