共用方式為


empty_view class (C++標準連結庫)

沒有元素的檢視。 此檢視適用於測試用途,例如呼叫需要提供檢視的程序代碼,但不需要存取其基礎數據。

語法

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

範本參數

T
項目的類型。 雖然 中 empty_view沒有任何元素,但所有範圍都是同質的。 也就是說,它們具有特定類型的元素。 因此,即使 empty_view 沒有專案,它仍然具有 型別,例如 empty_viewintstrings等的 。

檢視特性

如需下列專案的描述,請參閱 檢視類別特性

特性 描述
範圍配接器 views::empty
基礎範圍
項目類型 如建立 時 empty_view 所指定
檢視反覆運算器類別 contiguous_range
大小 是。 一律會傳回 0
const-iterable Yes
通用範圍 Yes
借用範圍 Yes

成員

成員函式 說明
建構函式C++20 empty_view建構 。
beginC++20 傳回 nullptr
endC++20 傳回 nullptr
sizeC++20 傳回 0
繼承自 view_interface 說明
backC++20 導致未定義的行為。
dataC++20 傳回 nullptr
emptyC++20 傳回 true
frontC++20 導致未定義的行為。
operator[]C++20 導致未定義的行為。
operator boolC++20 傳回 false

備註

建立 empty_view 的最佳方式是使用 empty 範圍配接器。 範圍配接器是建立檢視類別的預定方式。 如果您想要建立自己的自定義檢視類型,則會公開檢視類型。

因為 中永遠不能有任何元素 empty_view,所以某些編譯程式優化是可行的。 例如,編譯程式將會消除 for (auto e : std::views::empty<int>) {...} ,因為它知道沒有可逐一查看的。

的另一個empty_view用途empty_view是使用分隔符分割 split_view ,這會導致單一項目範圍。

需求

標頭: <ranges> (自C++20起)

命名空間std::ranges

需要編譯程式選項:/std:c++20或更新版本。

建構函式

建立 empty_view 的執行個體。

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

參數

T
基礎專案的型別,其中沒有任何專案。

備註

建立 empty_view 的最佳方式是使用 empty 範圍配接器。

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

導致未定義的行為。

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>;

參數

無。

傳回值

無。

備註

在偵錯組建中呼叫此函式會引發判斷提示,指出函式已在空 view_interface的上呼叫。

begin

傳回 , nullptr 因為檢視中沒有第一個專案。

static constexpr T* begin() noexcept

傳回值

nullptr

data

傳回 , nullptr 因為檢視中沒有要取得指標的第一個專案。

static constexpr T* data() noexcept

傳回值

nullptr.

empty

測試衍生檢視是否為空白。

static constexpr bool empty() noexcept

參數

無。

傳回值

傳回 true

end

傳回 , nullptr 因為檢視中沒有任何專案。

static constexpr T* end() noexcept

傳回值

nullptr.

front

導致未定義的行為。

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

參數

無。

傳回值

無。

備註

在偵錯組建中呼叫此函式會引發判斷提示,指出函式已在空 view_interface的上呼叫。

operator[]

導致未定義的行為。

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;

參數

pos
相對於要傳回之專案之開頭反覆運算器的位置。

傳回值

無。

備註

在偵錯組建中呼叫此函式會引發判斷提示,指出索引超出的範圍 view_interface

operator bool

測試衍生檢視是否不是空的。

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

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

參數

無。

傳回值

傳回 false

(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

取得檢視中的元素數目,一律為 0。

static constexpr size_t size()

參數

無。

傳回值

0.

另請參閱

<ranges>
empty 範圍配接器
single_view
檢視類別