我使用 epoll 来制作一个小型 TCP 服务器的原型(prototype),仅用于教学目的。
epoll有一个函数int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
。与操作 ( op
) EPOLL_CTL_ADD
一起使用时,该函数将fd添加到epoll监听的fd列表中。
我这边用C++写了一个epoll的包装类,它提供了一些有用的函数,包括Epoll::add_connection(int fd)
。该函数调用epoll_ctl()
并在 epoll 实例中添加作为参数传递的 fd。
所以,我的问题:
Epoll::add_connection(int fd)
不修改我的类的实例,也不修改任何属性。但是,由于我的类或多或少代表了 epoll 本身,因此实例在某种程度上被修改了......
我是否应该将此函数标记为常量?
最佳答案
一般考虑:我宁愿看看函数逻辑上的作用:它确实改变了内部表示,即使在给定的情况下没有嵌入成员实际上被修改。
如果以后出于某种原因需要(例如将文件描述符额外存储在 std::vector
中 - 或者至少记住存储的文件描述符的数量),您需要更改签名 - 然后依赖 const
对象的现有代码将会中断!
关于c++ - 如果一个方法不修改类本身的实例,而是修改类中嵌入的外部机制,我是否应该将其标记为 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72168616/