向量迭代器对于包装器类不可取消引用(没有超出 end() 取消引用)
Vector iterator not dereferencable for a wrapper class (Without beyond the end() dereferencing)
我试图理解在基于范围的 for 循环的情况下参数相关查找的行为。我将我的类型的开始和结束实现为与我的类型相同的命名空间中的自由函数。我不断收到运行时断言失败错误。
表达式:向量迭代器不可去引用
这是我编写的示例代码:
namespace my {
struct MyType {
std::vector<int> hiddenData;
MyType(int i) : hiddenData(i) {}
};
auto begin(MyType obj) {
return obj.hiddenData.begin();
}
auto end(MyType obj) {
return obj.hiddenData.end();
}
}
void test() {
my::MyType m(5);
for (auto& e : m)
std:: cout << e << std:: endl;
}
感谢您查看它!
这是一个问题:
auto begin(MyType obj)
MyType 是一个临时对象。 因此,当函数返回时,此对象不再存在,因此返回的迭代器无效。
相反,传递一个引用:
auto begin(MyType& obj)
auto end(MyType& obj)
相关文章:
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用运算符不能重载
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- C++ 关于指针取消引用的技术问题
- 没有取消引用/解包对象的标准方法?
- 列表 iter 不取消引用 使用列表进行插入排序
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 取消引用结束指针到数组类型的一个
- 取消引用向量时出现问题
- 取消引用指向整数的指针时获得不同的结果
- C++:取消引用十六进制值,有点语法问题
- C/C++ 取消引用错误:在空检查之前取消引用
- 取消引用后C++空测试
- 立即取消引用unique_ptr
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 取消引用 void 指针以将值分配给结构
- boost_multi_index迭代器取消引用给出常量
- 为什么"std::uninitialized_copy"通常取消对未初始化内存的迭代器的引用不是未定
- 矢量迭代器不能与 std::shared_ptr<> 取消引用