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) |
引用在列表初始化中建立的臨時陣列 (類模板) |