std::data
來自 cppreference.com
< cpp | 迭代器 (iterator)
定義於標頭檔案 <array> |
||
在標頭檔案 <deque> 中定義 |
||
在標頭檔案 <flat_map> 中定義 |
||
在標頭檔案 <flat_set> 中定義 |
||
在標頭檔案 <forward_list> 中定義 |
||
在標頭檔案 <inplace_vector> 中定義 |
||
定義於標頭檔案 <iterator> |
||
定義於標頭檔案 <list> |
||
定義於標頭檔案 <map> |
||
在標頭檔案 <regex> 中定義 |
||
在標頭檔案 <set> 中定義 |
||
在標頭檔案 <span> 中定義 |
||
定義於標頭檔案 <string> |
||
定義於標頭檔案 <string_view> |
||
在標頭檔案 <unordered_map> 中定義 |
||
定義於標頭檔案 <unordered_set> |
||
在標頭檔案 <vector> 中定義 |
||
template< class C > constexpr auto data( C& c ) -> decltype(c.data()); |
(1) | (C++17 起) |
template< class C > constexpr auto data( const C& c ) -> decltype(c.data()); |
(2) | (C++17 起) |
template< class T, std::size_t N > constexpr T* data( T (&array)[N] ) noexcept; |
(3) | (C++17 起) |
template< class E > constexpr const E* data( std::initializer_list<E> il ) noexcept; |
(4) | (C++17 起) |
返回指向包含範圍元素的記憶體塊的指標。
1,2) 返回 c.data()。
3) 返回 array。
4) 返回 il.begin()。
目錄 |
[編輯] 引數
c | - | 一個容器或檢視,它有一個 data() 成員函式 |
array | - | 任意型別的陣列 |
il | - | 一個 std::initializer_list |
[編輯] 返回值
1,2) c.data()
3) array
4) il.begin()
[編輯] 異常
1) 可能會丟擲實現定義的異常。
[編輯] 注意
對於 std::initializer_list 的過載是必要的,因為它沒有成員函式 data
。
特性測試宏 | 值 | 標準 | 特性 |
---|---|---|---|
__cpp_lib_nonmember_container_access |
201411L |
(C++17) | std::size()、std::data() 和 std::empty() |
[編輯] 可能的實現
第一版 |
---|
template<class C> constexpr auto data(C& c) -> decltype(c.data()) { return c.data(); } |
第二版 |
template<class C> constexpr auto data(const C& c) -> decltype(c.data()) { return c.data(); } |
第三版 |
template<class T, std::size_t N> constexpr T* data(T (&array)[N]) noexcept { return array; } |
第四個版本 |
template<class E> constexpr const E* data(std::initializer_list<E> il) noexcept { return il.begin(); } |
[編輯] 示例
執行此程式碼
#include <cstring> #include <iostream> #include <string> int main() { std::string s{"Hello world!\n"}; char a[20]; // storage for a C-style string std::strcpy(a, std::data(s)); // [s.data(), s.data() + s.size()] is guaranteed to be an NTBS since C++11 std::cout << a; }
輸出
Hello world!
[編輯] 參閱
(C++20) |
獲取指向連續範圍開頭的指標 (自定義點物件) |
(C++20) |
獲取指向只讀連續範圍開頭的指標 (自定義點物件) |