empty_view Klasse (C++-Standardbibliothek)

Eine Ansicht ohne Elemente. Diese Ansicht ist für Testzwecke nützlich, z. B. zum Aufrufen von Code, der mit einer Ansicht bereitgestellt werden muss, aber nicht auf die zugrunde liegenden Daten zugreifen muss.

Syntax

template<class T>
    requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;

Vorlagenparameter

T
Der Typ des Elements. Obwohl in einem empty_viewBereich keine Elemente vorhanden sind, sind alle Bereiche homogen. Das heißt, sie haben Elemente eines bestimmten Typs. Obwohl ein Element empty_view keine Elemente hat, hat es immer noch einen Typ, z. B. einen empty_view von int, oder stringsusw.

Eigenschaften der Ansicht

Eine Beschreibung der folgenden Einträge finden Sie unter Anzeigen von Klassenmerkmalen

Merkmal Beschreibung
Range Adaptor views::empty
Zugrunde liegender Bereich Keine
Elementtyp Wie angegeben, wenn die Erstellung erfolgt empty_view
Iteratorkategorie anzeigen contiguous_range
Größer eingestellt Ja. Gibt immer 0 zurück.
Ist const-iterierbar Ja
Allgemeiner Bereich Ja
Geliehener Bereich Ja

Member

Memberfunktionen Beschreibung
Konstruktoren C++20 Erstellen eines empty_view.
beginC++20 Gibt nullptr zurück.
endC++20 Gibt nullptr zurück.
sizeC++20 Gibt 0 (null) zurück
Geerbt von view_interface Beschreibung
backC++20 Führt zu einem nicht definierten Verhalten.
dataC++20 Gibt nullptr zurück.
emptyC++20 Gibt true zurück.
frontC++20 Führt zu einem nicht definierten Verhalten.
operator[]C++20 Führt zu einem nicht definierten Verhalten.
operator boolC++20 Gibt false zurück.

Hinweise

Die beste Methode zum Erstellen eines Steuerelements empty_view ist die Verwendung des empty Bereichsadapters. Bereichsadapter sind die beabsichtigte Möglichkeit zum Erstellen von Ansichtsklassen. Die Ansichtstypen werden für den Fall verfügbar gemacht, dass Sie ihren eigenen benutzerdefinierten Ansichtstyp erstellen möchten.

Da es niemals Elemente in einer empty_viewCompileroptimierung geben kann, sind bestimmte Compileroptimierungen möglich. Beispielsweise wird der Compiler eliminiert for (auto e : std::views::empty<int>) {...} , da er weiß, dass nichts zu durchlaufen ist.

Eine weitere Verwendung ist empty_view das Aufteilen eines split_view empty_view Trennzeichens, was zu einem Bereich einzelner Elementbereiche führt.

Anforderungen

Header: <ranges> (seit C++20)

Namespace:std::ranges

Compileroption: /std:c++20 oder höher ist erforderlich.

Konstruktoren

Erstellen Sie eine Instanz von empty_view.

template<class T>
inline constexpr empty_view<T> empty{};

Parameter

T
Der Typ des zugrunde liegenden Elements, von dem keine vorhanden ist.

Hinweise

Die beste Methode zum Erstellen eines Steuerelements empty_view ist die Verwendung des empty Bereichsadapters.

Beispiel: empty_view

// requires /std:c++20 or higher
#include <ranges>
#include <iostream>

int main()
{
    auto anEmptyView = std::views::empty<int>;
    bool isNotEmpty = (bool)anEmptyView;
    std::cout << std::boolalpha << isNotEmpty << "\n"; // false
    std::cout << std::boolalpha << anEmptyView.empty(); // true
}
false
true

back

Führt zu einem nicht definierten Verhalten.

constexpr auto back()
    requires ranges::bidirectional_range<T> && ranges::common_range<T>;

constexpr auto back() const
    requires ranges::bidirectional_range<const T> && ranges::common_range<const T>;

Parameter

Keine

Rückgabewert

Keine.

Hinweise

Das Aufrufen dieser Funktion in einem Debugbuild löst eine Assertion aus, die für eine leere view_interfaceFunktion aufgerufen wurde.

begin

Gibt zurück nullptr , da es kein erstes Element in der Ansicht gibt.

static constexpr T* begin() noexcept

Rückgabewert

nullptr

data

Gibt zurück nullptr , da kein erstes Element in der Ansicht vorhanden ist, um einen Zeiger abzurufen.

static constexpr T* data() noexcept

Rückgabewert

nullptr.

empty

Testen Sie, ob die abgeleitete Ansicht leer ist.

static constexpr bool empty() noexcept

Parameter

Keine

Rückgabewert

Gibt true zurück.

end

Gibt zurück nullptr , da in der Ansicht keine Elemente vorhanden sind.

static constexpr T* end() noexcept

Rückgabewert

nullptr.

front

Führt zu einem nicht definierten Verhalten.

constexpr auto front()
    requires ranges::forward_range<T>;
constexpr auto front() const
    requires ranges::forward_range<const T>;

Parameter

Keine

Rückgabewert

Keine.

Hinweise

Das Aufrufen dieser Funktion in einem Debugbuild löst eine Assertion aus, die für eine leere view_interfaceFunktion aufgerufen wurde.

operator[]

Führt zu einem nicht definierten Verhalten.

template<ranges::random_access_range R = T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

Parameter

pos
Die Position relativ zum Anfangs iterator des zurückzugebenden Elements.

Rückgabewert

Keine.

Hinweise

Das Aufrufen dieser Funktion in einem Debugbuild löst eine Assertion aus, für die der Index außerhalb des Bereichs view_interfaceliegt.

operator bool

Testen Sie, ob die abgeleitete Ansicht nicht leer ist.

constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };

constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };

Parameter

Keine

Rückgabewert

Gibt false zurück.

Beispiel: (bool)

// requires /std:c++20 or higher
#include <ranges>
#include <iostream>

int main()
{
    auto anEmptyView = std::views::empty<int>;

    if (anEmptyView) // check if anEmptyView isn't empty
    {
        std::cout << "Error: why does an empty_view have elements?\n";
    }
    else
    {
        std::cout << "Correct: an empty_view is not not empty\n";
    }
}
Correct: an empty_view is not not empty

size

Rufen Sie die Anzahl der Elemente in der Ansicht ab, die immer 0 sind.

static constexpr size_t size()

Parameter

Keine

Rückgabewert

0.

Siehe auch

<ranges>
empty Range Adaptor
single_view
Anzeigen von Klassen