最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<string_view>

# std::basic_string_view::starts_with(C++20)

    constexpr bool starts_with(basic_string_view x) const noexcept; // (1)
    constexpr bool starts_with(CharT x) const noexcept;             // (2)
    constexpr bool starts_with(const CharT* x) const;               // (3)

## 概要

指定の文字列で始まるかを判定する。

- (1) : `*this`が参照する文字列範囲の先頭が、`x`が参照する文字列範囲と一致するかを判定する
- (2) : `*this`が参照する文字列範囲の先頭が、文字`x`と一致するかを判定する
- (3) : `*this`が参照する文字列範囲の先頭が、文字列`x`と一致するかを判定する

## 戻り値

- (1) : 以下と等価である

      return substr(0, x.size()) == x;

- (2) : 以下と等価である

      return !empty() && Traits::eq(front(), x);

- (3) : 以下と等価である

      return starts_with(basic_string_view(x));

## 例外

- (1), (2) : 投げない

## 例

    #include <cassert>
    #include <string_view>

    int main()
    {
      const std::string_view sv = "aaabbbcccdddeee";

      // (1)
      {
        std::string_view svx = "aaa";
        assert(sv.starts_with(svx));
      }

      // (2)
      {
        assert(sv.starts_with('a'));
      }

      // (3)
      {
        assert(sv.starts_with("aaa"));
      }
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

- Clang: 7.0 ✅
- GCC: 9.1 ✅
- Visual C++: ??

## 参照

- P0457R2 String Prefix and Suffix Checking
- LWG Issue 3040. `basic_string_view::starts_with` Effects are incorrect