c++ - 如果一个方法不修改类本身的实例,而是修改类中嵌入的外部机制,我是否应该将其标记为 const?

标签 c++

我使用 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/

相关文章:

c++ - 关于右值引用的一些说明

c++ - 相互依赖任务的线程池

c++ - 无符号用户定义整数文字

c++ - 从 B 树中删除一个节点

c++ - 解复用/解码后如何正确验证 ffmpeg pts/dts?

c++ - 如何使用free删除链表

c++ - 没有得到 ASCII 数字 =7 的字符串打印输出

c# - 为什么原生Win32难拆,.NET app拆容易?

C++ - TC++PL RTTI dynamic_cast 向下转型和虚拟表混淆(及其实现)

C++ 阻止用户创建对象实例