c++ - 输入迭代器必须具有 const 解引用运算符吗?

标签 c++ iterator constants

输入迭代器是否必须有一个 const 解引用运算符,或者仅仅是一个非 const 版本也能满足它的要求?

最佳答案

没有。

例如“输入迭代器”。

这通常是从流中读取的。取消引用它会读取一个值并更改基础流。在使用++ 运算符之前,使用取消引用运算符将​​再次无效。

http://www.sgi.com/tech/stl/InputIterator.html

根据评论进行编辑。

你问的是can吗?

Sure it can you can do anything in C++.

或者你问的是应该?

Now it depends on which bit is const:

  • Do you mean should de-reference by a const method?.
  • Or do you mean the reference returned (to the object) is const?

我个人认为这两个问题的答案是否定的。
我认为我很确定这不会违反输入迭代器的约束(在上面的链接中定义)。

但是 我认为返回一个对象的非成本引用是不明智的,如果用户改变了该对象也不会改变流所引用的底层对象(这违反了最少的惊喜)。

总的来说,我认为你需要澄清你的问题。
如果您更详细地解释上下文并询问特定签名是否违反约束,那么我可能会给出更好的答案。目前这个问题过于模糊,因此我只能以过于笼统的方式表达答案。

关于c++ - 输入迭代器必须具有 const 解引用运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13427305/

相关文章:

java - Java 中删除元素时迭代 LinkedList

python - 灵活的滑动窗口(Python)

c++ - C++中的宏和常量有什么区别?

c++ - 为什么只检查某些值的错误? (C++?)

c++ - 在RcppParallel中访问begin和end(示例计算 vector 的均值)

c++ - 类成员变量的decltype,是否被禁止?为什么?

C++ - 对象的平滑加速和减速

C++ 模板特化友元迭代器错误 : invalid use of incomplete type

c++ - 一种计算数学常数 e 的有效方法

objective-c - 在初始化 const 对象时非常迷茫