c++ - 自动初始化和 const 正确性

标签 c++

我有一个自定义迭代器实现(它迭代数据库查询结果,但这与此无关)。它在概念上有两组函数:get 类型函数,它从当前项目(当前行)返回一个值,以及 setup 类型函数(在我的例子中是 binds),它在开始迭代之前设置迭代器,因此新的迭代器实例实际上还没有指向第一个项目。还有一个 reset 函数可以使迭代器无效并准备好进行不同的设置。

当其中一个 get 函数被调用时,它首先检查迭代器是否仍然是新的或已被重置(有效地指向 begin()-1)和如果是,则将其推进到第一项。 get 函数将(应该)是 const,除了有条件的第一个进步阻止了这一点。

我应该:

  1. 将它们声明为 const 并为 isReset 标志放入一个 mutable,或者
  2. 保持原样,并接受这样一个事实,即在后台初始化对象使其成为非const,或者
  3. 用检查初始化状态代替自初始化,让用户在调用任何 get 函数之前调用一次 operator++?<

最佳答案

您的迭代器有状态(即底层数据是否可用),“get”函数会改变该状态。所以这使得它就像任何其他迭代器一样。 “get”函数不应该是常量。顺便说一句,与其调用你的函数“get”,不如让迭代器具有与标准库迭代器相同的接口(interface)——这样你就可以在上面使用标准算法了。因此,请使用 operator*() 和 operator++() 等函数。

关于c++ - 自动初始化和 const 正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33587458/

相关文章:

c++ - 将类型分配给 uint8_t 值

c++ - 从 QString 中删除前导零的最佳方法

c++ - 一遍又一遍传递对象的替代方法

c++ - 尝试在 CLion/CMake 中构建共享库

c++ - 访问对象void pointer c++的成员

c++ - 如何在 Ubuntu 上通过 C++ 使用 SQLite? (未定义的引用错误)

c++ - fatal error C1083 : Cannot open include file: 'complex.h' : No such file or directory . .\lapacke\include\lapacke.h

c++ - 输入开尔文或摄氏度后程序终止? (我的代码有什么问题?)

c++ - strcpy() 没有正确复制 c++

c++ - 当文件路径名超过 255 个字符时,如何在 Windows 中使用 MFC 创建文件?