最終更新日時: 2026年04月02日 14時29分58秒 (JST)
teruyamato0731 が更新

履歴 編集

function
<iterator>

# std::reverse_iterator::operator*

    reference operator*() const;           // C++03
    constexpr reference operator*() const; // C++17

## 概要

イテレータを間接参照する。

## 効果

- C++11

    deref_tmp = current;
    --deref_tmp;
    return *deref_tmp;

※`deref_tmp`は、ダングリング参照を避けるために関数内のローカル変数ではなく、メンバ変数として保持される。

- C++14

    Iterator tmp = current;
    return *--tmp;

## 例

    #include <iostream>
    #include <vector>
    #include <iterator>

    int main()
    {
      std::vector<int> v = {1, 2, 3};

      std::reverse_iterator<decltype(v)::iterator> it(v.end());

      int& result = *it;

      std::cout << result << std::endl;
    }

### 出力

    3

## 参照

- LWG Issue 2360. `reverse_iterator::operator*()` is unimplementable
  - C++11まで効果は、データ競合が発生するため、C++14でそれを考慮して効果を見直した。
- P0031R0 A Proposal to Add Constexpr Modifiers to `reverse_iterator`, `move_iterator`, `array` and Range Access