Namespaces
Variants

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

From 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() から取得したポインタが無効化される可能性がある要因:

1) constオーバーロードの data を通じてアクセスされる文字配列を変更することは未定義動作です。
2) data() + size() に格納されている末尾ナルターミネータを 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> の公開メンバ関数)