Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>::data

From ja.cppreference.net
 
 
 
std::basic_string
 
const CharT* data() const;
(1) (C++11からnoexcept)
(C++20からconstexpr)
CharT* data() noexcept;
(2) (C++17から)
(C++20からconstexpr)

文字ストレージとして機能する内部配列へのポインタを返します。このポインタは、範囲

[data(), data() + size())

(C++11まで)

[data(), data() + size()]

(C++11から)

が有効であり、その中の値が文字列に格納されている値に対応するようなものです。

返される配列は null 終端されている必要はありません。

もし empty() が true を返す場合、ポインタはデリファレンスすべきではない非 null ポインタです。

(C++11まで)

返される配列は null 終端されています。つまり、data() と c_str() は同じ機能を実行します。

もし empty() が true を返す場合、ポインタは単一の null 文字を指します。

(C++11から)

data() から取得されたポインタは、以下によって無効化される可能性があります:

  • 文字列への非 const 参照を任意の標準ライブラリ関数に渡すこと、または
  • operator[](), at(), front(), back(), begin(), end(), rbegin(), rend() を除く、文字列の非 const メンバ関数を呼び出すこと。
1) data の const オーバーロードを通じてアクセスされた文字配列を変更することは、未定義の動作です。
2) data() + size() に格納された終端の null ターミネータを CharT() 以外の値に変更することは、未定義の動作です。

パラメータ

(なし)

戻り値

基礎となる文字ストレージへのポインタ。

data ( ) [ i ] == operator [ ] ( i ) すべての i について [ ​ 0 ​ , size ( ) ) の範囲で成り立つ。

(C++11まで)

data ( ) + i == std:: addressof ( operator [ ] ( i ) ) すべての i について [ ​ 0 ​ , size ( ) ] の範囲で成り立つ。

(C++11以降)

計算量

定数。

例

#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()));
}

関連項目

( DR* )
最初の文字にアクセスする
(公開メンバ関数)
( DR* )
最後の文字にアクセスする
(公開メンバ関数)
文字列の変更不可能な標準C文字配列バージョンを返す
(公開メンバ関数)
ビューの最初の文字へのポインタを返す
(std::basic_string_view<CharT,Traits>の公開メンバ関数)