# std::basic_string_view<CharT,Traits>::starts_with

< cpp‎ | string‎ | basic string view

constexpr bool starts_with(std::basic_string_view sv) const noexcept; | (1) | (C++20 起)
constexpr bool starts_with(CharT c) const noexcept; | (2) | (C++20 起)
constexpr bool starts_with(const CharT* s) const; | (3) | (C++20 起)

检查 string_view 是否始于给定前缀，其中

1) 前缀为 string_view 。等效地返回 substr(0, sv.size()) == sv
2) 前缀为单个字符。等效地返回 !empty() && Traits::eq(front(), c)
3) 前缀为空终止字符串。等效地返回 starts_with(basic_string_view(s))

### 参数

sv | - | 可能为来自 `std::basic_string` 转换结果的字符串视图
c | - | 单个字符
s | - | 空终止字符串

### 返回值

若 string_view 始于给定前缀则为 true ，否则为 false 。

### 示例

    #include <iostream>
    #include <string_view>

    auto main() -> int
    {
        using namespace std::literals;

        std::cout
            << std::boolalpha

            // bool starts_with(basic_string_view x) const noexcept;
            << "https://cppreference.com"sv.starts_with("http"sv) << ' ' // true
            << "https://cppreference.com"sv.starts_with("ftp"sv) << ' '  // false

            // bool starts_with(CharT x) const noexcept;
            << "C++20"sv.starts_with('C') << ' ' // true
            << "C++20"sv.starts_with('J') << ' ' // false

            // bool starts_with(const CharT* x) const;
            << std::string_view("string_view").starts_with("string") << ' ' // true
            << std::string_view("string_view").starts_with("String") << ' ' // false
            << '\n';
    }

输出：

    true false true false true false

### 参阅

ends_with (C++20) | 检查 string_view 是否终于给定后缀 (公开成员函数)
starts_with (C++20) | 检查 string 是否始于给定前缀 (`std::basic_string<CharT,Traits,Allocator>` 的公开成员函数)
ends_with (C++20) | 检查 string 是否终于给定后缀 (`std::basic_string<CharT,Traits,Allocator>` 的公开成员函数)
contains (C++23) | 检查字符串是否含有给定的子串或字符 (`std::basic_string<CharT,Traits,Allocator>` 的公开成员函数)
contains (C++23) | 检查字符串视图是否含有给定的子串或字符 (公开成员函数)
compare | 比较二个视图 (公开成员函数)