std::move_iterator<Iter>::operator*,->

来自cppreference.com
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
 
reference operator*()const;
(1) (C++11 起)
(C++17 起为 constexpr)
pointer operator->()const;
(2) (C++11 起)
(C++17 起为 constexpr)
(C++20 弃用)

返回到当前元素的右值引用或指针。

目录

[编辑]返回值

1)static_cast<reference>(*current )(C++20 前)ranges::iter_move(current )(C++20 起)

[编辑]注解

operator-> 被弃用的原因是在解引用它的结果时可能会产生左值。这可能导致意外行为。

[编辑]示例

#include <iomanip>#include <iostream>#include <iterator>#include <string>#include <vector>   void print(auto rem, constauto& v){for(std::cout<< rem;constauto& e : v)std::cout<<std::quoted(e)<<' ';std::cout<<'\n';}   int main(){std::vector<std::string> p{"alpha", "beta", "gamma", "delta"}, q; print("1) p: ", p);for(std::move_iterator it{p.begin()}, end{p.end()}; it != end;++it){ it->push_back('!');// 调用 -> string::push_back(char) q.emplace_back(*it);// *it <- 重载 (1)} print("2) p: ", p); print("3) q: ", q);   std::vector v{1, 2, 3};std::move_iterator it{v.begin()};// *it = 13; // 错误:将右值用作左值}

可能的输出:

1) p: "alpha" "beta" "gamma" "delta" 2) p: "" "" "" "" 3) q: "alpha!" "beta!" "gamma!" "delta!"

[编辑]缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2106 C++11 *current 产生纯右值的情况下 operator* 会返回悬垂引用 此时直接返回该对象

[编辑]参阅

按索引访问元素
(公开成员函数)[编辑]
close