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_view
、 int
或 strings
等的 。
檢視特性
如需下列專案的描述,請參閱 檢視類別特性
特性 | 描述 |
---|---|
範圍配接器 | views::empty |
基礎範圍 | 無 |
項目類型 | 如建立 時 empty_view 所指定 |
檢視反覆運算器類別 | contiguous_range |
大小 | 是。 一律會傳回 0 |
為 const -iterable |
Yes |
通用範圍 | Yes |
借用範圍 | Yes |
成員
成員函式 | 說明 |
---|---|
建構函式C++20 | empty_view 建構 。 |
begin C++20 |
傳回 nullptr 。 |
end C++20 |
傳回 nullptr 。 |
size C++20 |
傳回 0 |
繼承自 view_interface |
說明 |
back C++20 |
導致未定義的行為。 |
data C++20 |
傳回 nullptr 。 |
empty C++20 |
傳回 true 。 |
front C++20 |
導致未定義的行為。 |
operator[] C++20 |
導致未定義的行為。 |
operator bool C++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
.