最終更新日時: 2025年07月09日 00時33分39秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<iterator>

# std::basic_const_iterator::operator->(C++23)

    constexpr const auto* operator->() const
      requires is_lvalue_reference_v<iter_reference_t<Iterator>> &&
               same_as<remove_cvref_t<iter_reference_t<Iterator>>, value_type>;

## 概要

イテレータを通して参照先の要素のメンバにアクセスする

## 戻り値

ラップするイテレータを`current_`というメンバに保持するとして

- `Iterator`が`contiguous_iterator`のモデルとなる場合
  - `to_address((current_))`
- それ以外の場合
  - `addressof(*current_)`

## 例

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

    struct S {
      int n;

      void print() const {
        std::cout << "call const : " << this->n << '\n';
      }

      void print() {
        std::cout << "call non const : " << this->n << '\n';
      }
    };

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

      std::basic_const_iterator cit = vec.begin();

      cit->print();
    }

### 出力

    call const : 1

## バージョン

### 言語

- C++23

### 処理系

- Clang: ??
- GCC: 13.1 ✅
- Visual C++: 2022 Update 6 ✅

## 参照

- P2278R4 `cbegin` should always return a constant iterator