std::basic_string_view
| 定義於標頭檔案 <string_view> |
||
| template< class CharT, |
(C++17 起) | |
類模板 basic_string_view 描述一個能指代一個 CharT 的常量連續序列的物件,該序列的首元素位於位置零。
對於 basic_string_view str,當某個操作使得範圍 [str.data(), str.data() + str.size()) 中的指標失效時,指向 str 元素的指標、迭代器和引用都會失效。
|
|
(C++23 起) |
典型的實現只保有二個成員:一個指向常量 CharT 的指標和一個大小。
提供了用於常見字元型別的幾個 typedef
| 定義於標頭檔案
<string_view> | |
| 型別 | 定義 |
| std::string_view (C++17) | std::basic_string_view<char> |
| std::wstring_view (C++17) | std::basic_string_view<wchar_t> |
| std::u8string_view (C++20) | std::basic_string_view<char8_t> |
| std::u16string_view (C++17) | std::basic_string_view<char16_t> |
| std::u32string_view (C++17) | std::basic_string_view<char32_t> |
目錄 |
[編輯] 模板形參
| CharT | - | 字元型別 |
| 特性 | - | 指定字元型別上的操作的 字元特性 (CharTraits) 類。與 std::basic_string 一樣,Traits::char_type 必須指名與 CharT 相同的型別,否則程式非良構。 |
[編輯] 成員型別
| 巢狀型別 | 定義 | ||||
traits_type
|
特性
| ||||
value_type
|
CharT
| ||||
pointer
|
CharT* | ||||
const_pointer
|
const CharT* | ||||
reference
|
CharT& | ||||
const_reference
|
const CharT& | ||||
const_iterator
|
實現定義的常量舊式隨機訪問迭代器 (LegacyRandomAccessIterator),
其 | ||||
iterator
|
const_iterator
| ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> | ||||
reverse_iterator
|
const_reverse_iterator
| ||||
size_type
|
std::size_t | ||||
difference_type
|
std::ptrdiff_t |
注意:iterator 和 const_iterator 是同一型別,因為字串檢視是到常量字元序列的檢視。
所有對容器 (Container) 的迭代器型別的要求也同樣適用於 basic_string_view 的 iterator 和 const_iterator 型別。
[編輯] 成員函式
建構函式與賦值 | |
構造 basic_string_view(公開成員函式) | |
| 賦值檢視 (公開成員函式) | |
迭代器 | |
| 返回指向起始的迭代器 (公開成員函式) | |
| 返回指向末尾的迭代器 (公開成員函式) | |
| 返回指向起始的逆向迭代器 (公開成員函式) | |
| 返回指向末尾的逆向迭代器 (公開成員函式) | |
元素訪問 | |
| 訪問指定的字元 (公開成員函式) | |
| 帶邊界檢查訪問指定字元 (公開成員函式) | |
| 訪問第一個字元 (公開成員函式) | |
| 訪問最後一個字元 (公開成員函式) | |
| 返回指向檢視首字元的指標 (公開成員函式) | |
容量 | |
| 返回字元數 (公開成員函式) | |
| 返回字元的最大數量 (公開成員函式) | |
| 檢查檢視是否為空 (公開成員函式) | |
修改器 | |
| 透過前移其起始位置來收縮檢視 (公開成員函式) | |
| 通過後移其末尾位置來收縮檢視 (公開成員函式) | |
| 交換內容 (公開成員函式) | |
操作 | |
| 複製字元 (公開成員函式) | |
| 返回子字串 (公開成員函式) | |
| 比較兩個檢視 (公開成員函式) | |
| (C++20) |
檢查字串檢視是否以給定字首開頭 (公開成員函式) |
| (C++20) |
檢查字串檢視是否以給定字尾結尾 (公開成員函式) |
| (C++23) |
檢查字串檢視是否包含給定子字串或字元 (公開成員函式) |
| 在檢視中查詢字元 (公開成員函式) | |
| 查詢子串的最後一次出現 (公開成員函式) | |
| 查詢字元的首次出現 (公開成員函式) | |
| 查詢字元的最後一次出現 (公開成員函式) | |
| 查詢字元的首次缺席 (公開成員函式) | |
| 查詢字元的最後一次缺席 (公開成員函式) | |
常量 | |
| [靜態] |
特殊值。確切含義取決於上下文 (公開靜態成員常量) |
[編輯] 非成員函式
| (C++17)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20) |
按字典序比較兩個 string_view (函式模板) |
輸入/輸出 | |
| (C++17) |
對 string_view 執行流輸出 (函式模板) |
[編輯] 字面量
| 在內聯名稱空間
std::literals::string_view_literals 中定義 | |
| (C++17) |
建立字元陣列字面量的字串檢視 (函式) |
[編輯] 輔助類
| 字串檢視的雜湊支援 (類模板特化) |
[編輯] 輔助模板
| template< class CharT, class Traits > inline constexpr bool |
(C++20 起) | |
此 ranges::enable_borrowed_range 的特化使得 basic_string_view 滿足 borrowed_range。
| template< class CharT, class Traits > inline constexpr bool |
(C++20 起) | |
此 ranges::enable_view 的特化使得 basic_string_view 滿足 view。
推導指引 |
(C++20 起) |
[編輯] 注意
程式設計師有責任確保 std::string_view 的生存期不超過其所指向的字元陣列
std::string_view good{"a string literal"}; // "Good" case: `good` points to a static array. // String literals reside in persistent data storage. std::string_view bad{"a temporary string"s}; // "Bad" case: `bad` holds a dangling pointer since the std::string temporary, // created by std::operator""s, will be destroyed at the end of the statement.
即使在 C++23 引入正式要求之前,std::basic_string_view 的特化在所有現有實現中都已經是可平凡複製型別。
| 特性測試宏 | 值 | 標準 | 特性 |
|---|---|---|---|
__cpp_lib_string_view |
201606L |
(C++17) | std::string_view
|
201803L |
(C++20) | ConstexprIterator(常量表達式迭代器) | |
__cpp_lib_string_contains |
202011L |
(C++23) | contains
|
[編輯] 示例
輸出
▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─ ▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄ ▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀ ▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─▀▄─ ▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─▄▀─
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
| 缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
|---|---|---|---|
| LWG 3203 | C++17 | 只有從 basic_string_view 的成員函式返回的 指標、迭代器和引用可能失效 |
所有指向 basic_string_view 元素的指標、迭代器和引用 都可能失效 |
[編輯] 參閱
| 儲存和操作字元序列 (類模板) | |
| 連線二個字串、一個字串和一個 char,或一個字串和一個 string_view (函式模板) | |
| (C++20) |
一個連續物件序列的非擁有檢視 (類模板) |
| (C++11) |
引用在列表初始化中建立的臨時陣列 (類模板) |