std::basic_...w::ends_with(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ‘‘ std::basic_...w::ends_with(3) πŸ‘‘

okay so we're in the C++ Standard Libary manual (yes, "Libary" β€” the typo is part of the lore, bestie πŸ™ˆ), section (3), and today's main character is std::basic_string_view::ends_with. It's giving "does this string view end with that suffix?" and honestly? iconic.


✨ NAME ✨

std::basic_string_view::ends_with β€” std::basic_string_view::ends_with

(periodt, the name ate and left no crumbs πŸ’…)

πŸ¦‹ Synopsis πŸ¦‹

three overloads, all constexpr, all (since C++20), and look at the exact noexcept situation before you start assuming things πŸ‘€:

constexpr bool ends_with( basic_string_view sv ) const noexcept; (1)
(since C++20)
constexpr bool ends_with( CharT ch ) const noexcept;             (2)
(since C++20)
constexpr bool ends_with( const CharT* s ) const;                (3)
(since C++20)

Checks if the string view ends with the given suffix, where:

  1. the suffix is a string view. Effectively returns size() >= sv.size() && compare(size() - sv.size(), npos, sv) == 0.
  2. the suffix is a single character. Effectively returns !empty() && Traits::eq(back(), ch).
  3. the suffix is a null-terminated character string. Effectively returns ends_with(basic_string_view(s)).

🌸 Parameters 🌸

  • sv β€” a string view which may be a result of implicit conversion from std::basic_string
  • ch β€” a single character
  • s β€” a null-terminated character string

⭐ Return value ⭐

true if the string view ends with the provided suffix, false otherwise. that's the whole verdict, no plot twist 🫢

πŸ”₯ Notes πŸ”₯

the feature-test macro table says:

  • Feature-test macro: __cpp_lib_starts_ends_with
  • Value: 201711L
  • Std: (C++20)
  • Feature: String prefix and suffix checking: starts_with() and ends_with()

so yeah, this whole prefix/suffix situation is officially tracked, slay ✨

πŸŽ€ Example πŸŽ€

the original has that little // Run this code marker β€” you know the vibe. here's the code, untouched:

        #include <cassert>
        #include <string_view>

        int main()
        {
            using namespace std::literals;

            assert
            (""
                // (1) ends_with( basic_string_view sv )
                &&
       std::string_view("https://cppreference.com").ends_with(".com"sv) == true
                &&
       std::string_view("https://cppreference.com").ends_with(".org"sv) ==
       false

                // (2) ends_with( CharT c )
                && std::string_view("C++20").ends_with('0') == true
                && std::string_view("C++20").ends_with('3') == false

                // (3) ends_with( const CharT* s )
                && std::string_view("string_view").ends_with("view") == true
                && std::string_view("string_view").ends_with("View") == false
            );
        }

πŸ’œ See also πŸ’œ

  • starts_with β€” checks if the string view starts with the given prefix (C++20) (public member function)
  • starts_with β€” checks if the string starts with the given prefix (C++20) (public member function of std::basic_string<CharT,Traits,Allocator>)
  • ends_with β€” checks if the string ends with the given suffix (C++20) (public member function of std::basic_string<CharT,Traits,Allocator>)
  • contains β€” checks if the string contains the given substring or character (C++23) (public member function of std::basic_string<CharT,Traits,Allocator>)
  • contains β€” checks if the string view contains the given substring or character (C++23) (public member function)
  • compare β€” compares two views (public member function)

source/version: http://cppreference.com Β· date: 2024.06.10 Β· page: std::basic_...w::ends_with(3) β€” bye bestie, go check those suffixes πŸ’…βœ¨

πŸ“¦ where this page comes from