libpqxx
The C++ client library for PostgreSQL
Loading...
Searching...
No Matches
pqxx::zview Class Reference

Marker-type wrapper: zero-terminated std::string_view. More...

+ Inheritance diagram for pqxx::zview:
+ Collaboration diagram for pqxx::zview:

Public Member Functions

constexpr zview (char const text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))
 Convenience overload: construct using pointer and signed length.
 
constexpr zview (char text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))
 Convenience overload: construct using pointer and signed length.
 
constexpr zview (std::string_view other) noexcept
 Explicitly promote a string_view to a zview.
 
template<typename... Args>
constexpr zview (Args &&...args)
 Construct from any initialiser you might use for std::string_view.
 
 zview (std::string const &str) noexcept
 
constexpr zview (char const str[]) noexcept(noexcept(std::string_view{str}))
 Construct a zview from a C-style string.
 
template<size_t size>
constexpr zview (char const (&literal)[size])
 Construct a zview from a string literal.
 
constexpr char const * c_str () const &noexcept
 Either a null pointer, or a zero-terminated text buffer.
 

Detailed Description

Marker-type wrapper: zero-terminated std::string_view.

Warning
Use this only if the underlying string is zero-terminated.

When you construct a zview, you are promising that if the data pointer is non-null, the underlying string is zero-terminated. It otherwise behaves exactly like a std::string_view.

The terminating zero is not "in" the string, so it does not count as part of the view's length.

The added guarantee lets the view be used as a C-style string, which often matters since libpqxx builds on top of a C library. For this reason, zview also adds a c_str method.

Constructor & Destructor Documentation

◆ zview() [1/4]

template<typename... Args>
constexpr pqxx::zview::zview ( Args &&...  args)
inlineexplicitconstexpr

Construct from any initialiser you might use for std::string_view.

Warning
Only do this if you are sure that the string is zero-terminated.

◆ zview() [2/4]

pqxx::zview::zview ( std::string const &  str)
inlinenoexcept
Warning
There's an implicit conversion from std::string.

◆ zview() [3/4]

constexpr pqxx::zview::zview ( char const  str[])
inlineconstexprnoexcept

Construct a zview from a C-style string.

Warning
This scans the string to discover its length. So if you need to do it many times, it's probably better to create the zview once and re-use it.

◆ zview() [4/4]

template<size_t size>
constexpr pqxx::zview::zview ( char const (&)  literal[size])
inlineconstexpr

Construct a zview from a string literal.

A C++ string literal ("foo") normally looks a lot like a pointer to char const, but that's not really true. It's actually an array of char, which devolves to a pointer when you pass it.

For the purpose of creating a zview there is one big difference: if we know the array's size, we don't need to scan through the string in order to find out its length.


The documentation for this class was generated from the following file: