std::basic_string::data
提供: cppreference.com
< cpp | string | basic string
const CharT* data() const; |
(1) | |
CharT* data(); |
(2) | (C++17およびそれ以降) |
文字の記憶域として供給されているベースとなる配列を指すポインタを返します。 ポインタは範囲 [data(); data() + size())
が有効であり、その中の値は文字列に格納されている値に対応しています。
返された配列はNULL終端されているとは限りません。 empty() が true を返す場合、そのポインタは逆参照するべきでない非NULLなポインタです。 |
(C++11以前) |
返された配列はNULL終端されています。 つまり、 |
(C++11およびそれ以降) |
data()
から取得したポインタは以下の場合に無効化されるかもしれません。
- 文字列の非 const 参照を何らかの標準ライブラリ関数に渡す
- operator[](), at(), front(), back(), begin(), end(), rbegin(), rend() 以外の非 const メンバ関数を文字列に対して呼ぶ
1)
data
の const オーバーロードを通してアクセスできる文字配列を変更することは未定義動作です。2)
data()+size()
の位置に格納されているNULL終端文字を変更することは未定義動作です。目次 |
[編集] 引数
(なし)
[編集] 戻り値
ベースとなる文字記憶域を指すポインタ。
[0, size()) 内のすべての i について data()[i] == operator[](i) が成り立ちます。 |
(C++11以前) |
[0, size()] 内のすべての i について data() + i == &operator[](i) が成り立ちます。 |
(C++11およびそれ以降) |
[編集] 計算量
一定。
[編集] 例外
(なし) | (C++11以前) |
noexcept 指定: noexcept |
(C++11およびそれ以降) |
[編集] 例
Run this code
#include <algorithm> #include <cassert> #include <cstring> #include <string> int main() { std::string const s("Emplary"); assert(s.size() == std::strlen(s.data())); assert(std::equal(s.begin(), s.end(), s.data())); assert(std::equal(s.data(), s.data() + s.size(), s.begin())); assert(0 == *(s.data() + s.size())); }
[編集] 関連項目
(C++11) |
最初の文字にアクセスします (パブリックメンバ関数) |
(C++11) |
最後の文字にアクセスします (パブリックメンバ関数) |
文字列の変更不可能な標準 C の文字配列バージョンを返します (パブリックメンバ関数) |