名前空間
変種

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

提供: cppreference.com
 
 
 
std::basic_string
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
(1)
const CharT* data() const;
(C++11未満)
const CharT* data() const noexcept;
(C++11以上)
(C++20未満)
constexpr const CharT* data() const noexcept;
(C++20以上)
(2)
CharT* data() noexcept;
(C++17以上)
(C++20未満)
constexpr CharT* data() noexcept;
(C++20以上)

文字の記憶域として供給されているベースとなる配列を指すポインタを返します。 ポインタは範囲 [data(); data() + size()) が有効であり、その中の値は文字列に格納されている値に対応しています。

返された配列はヌル終端されているとは限りません。

empty()true を返す場合、そのポインタは逆参照するべきでない非ヌルなポインタです。

(C++11未満)

返された配列はヌル終端されています。 つまり、 data()c_str() は同じ機能を持ちます。

empty()true を返す場合、そのポインタは1個のヌル文字を指します。

(C++11以上)

data() から取得したポインタは以下の場合に無効化されるかもしれません。

  • 文字列の非 const 参照を何らかの標準ライブラリ関数に渡す
  • operator[](), at(), front(), back(), begin(), end(), rbegin(), rend() 以外の非 const メンバ関数を文字列に対して呼ぶ
1) data の const オーバーロードを通してアクセスできる文字配列を変更することは未定義動作です。
2) data()+size() の位置に格納されているヌル終端文字を CharT() 以外の文字に変更することは未定義動作です。

引数

(なし)

戻り値

ベースとなる文字記憶域を指すポインタ。

[0, size()) 内のすべての i について data()[i] == operator[](i) が成り立ちます。

(C++11未満)

[0, size()] 内のすべての i について data() + i == std::addressof(operator[](i)) が成り立ちます。

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


関連項目

(C++11)
最初の文字にアクセスします
(パブリックメンバ関数) [edit]
(C++11)
最後の文字にアクセスします
(パブリックメンバ関数) [edit]
文字列の変更不可能な標準 C の文字配列バージョンを返します
(パブリックメンバ関数) [edit]