前向迭代器iterator_traits::reference的要求
Requirements for forward iterator iterator_traits::reference
我正试图弄清楚forward_iterators的reference
类型到底有什么要求。最明显的例子是value_type = T;
和reference = T&;
。阅读关于前向迭代器需求的cppreference页面,我看到
Expression Return Equivalent expression
*i++ reference value_type& temp=*i; ++i; return temp;
std::vector<bool>
显示"等效表达式"并不总是有效的,因为它返回一个代理对象:
std::vector<bool> v(10);
auto i = v.begin();
std::vector<bool>::iterator::value_type& temp = *i; // error
// can't bind bool& to std::_Bit_reference
等效表达式在我看到的标准中没有提到。代理对象允许分配,这可能是一致性的关键。
除了试图确定需求之外,我的具体问题是知道value_type
== reference
是否既不是引用也不是支持赋值,将与标准库一起工作。
一些Container<int>
与iterator
标记为forward_iterator_tag
和reference == int
是有效的吗?
需求在[forward.iterators]中枚举:
类或指针类型
X
满足前向迭代器的要求,如果
X
满足输入迭代器(24.2.3)的要求,X
满足DefaultConstructible要求(17.6.3.1),- 如果
X
是可变迭代器,则reference
是对T
的引用;如果X
是const迭代器,reference就是引用到const T
,- […]
所以如果你的容器有reference
== int
,那么它不符合前向迭代器的要求。我想从技术上讲,vector<bool>::iterator
只是一个输入迭代器,尽管它被标记为随机访问迭代器。
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 不断"Attempting to reference a deleted function"
- 如何将 std::ifstream 转换为 std::basic_istream<CharT, Traits>&?
- std::iterator::reference 必须是引用吗?
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 为什么在使用 SDL2 时仍然收到'undefined reference'链接器错误?
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- Libcurl c++ "undefined reference to" (Windows/MinGW/g++)
- C++返回类型 T(&)[] 与使用 reference = T(&)[] 作为返回类型
- const auto & 和 auto & if reference 对象之间的区别是 const
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- 以前的'namespace reference { }'声明
- build error : undefined reference to `yyFlexLexer::yyFlexLex
- C ++引用函数参数似乎包含原始对象的副本,而不是充当"real reference"