const charT* data() const; // (1) C++03
const charT* data() const noexcept; // (1) C++11
constexpr const charT* data() const noexcept; // (1) C++20
charT* data() noexcept; // (2) C++17
constexpr charT* data() noexcept; // (2) C++20
概要
文字配列表現を取得する。
- (1) : 読み取り専用で文字配列の先頭へのポインタを取得する
- (2) : 文字配列の先頭へのポインタを取得する
戻り値
- (1) :
- C++03 : 文字配列の先頭へのポインタを返す。ただし、NULLで終端はされない
- C++11 : C 言語で使用されている文字列表現である、NULL(つまり
charT()
)で終端された文字配列の先頭へのポインタを返す
- (2) :
- C 言語で使用されている文字列表現である、NULL(つまり
charT()
)で終端された文字配列の先頭へのポインタを返す
- C 言語で使用されている文字列表現である、NULL(つまり
計算量
- (1), (2) : 定数時間
備考
- (1) :
- C++03まで :
- 本メンバ関数で返されたポインタが指す配列の値を変更してはいけない。
- 本メンバ関数を呼び出すと、対象オブジェクトの要素への既存の参照、ポインタ、イテレータは無効になる可能性がある。
- 本メンバ関数で返されたポインタは、対象オブジェクトに対する非constメンバ関数呼び出しにより無効になる可能性がある。
- なお、規格書に記載はないものの、
basic_string
への非const参照を引数に取る標準ライブラリ関数を、対象オブジェクトを渡して呼び出した場合にも、無効になる可能性があるものと思われる
- なお、規格書に記載はないものの、
- 本メンバが返すポインタは、
size() != 0
の場合、長さがsize()
のcharT
型の配列を指す。この配列の要素は対象オブジェクトの文字列と等しい。 size() == 0
の場合、NULL ポインタではなく、当該ポインタのコピー、および、当該ポインタに対してゼロの加算が可能な値である。c_str()
と異なり、本メンバ関数で返る配列は NULL(charT()
)で終端されていないので、注意すること。(通常は、size()
と併せて利用することになるだろう)
- C++11から :
- C++03まで :
- 対象オブジェクト内に NULL 文字があった場合、C 言語の文字列表現では正しく扱うことができないので注意すること。
- (2) :
- この関数を使用するユーザーは、
p + size()
(NULL終端) に格納されている値を変更してはならない
- この関数を使用するユーザーは、
例
#include <string>
#include <cstdio>
#include <cstring>
int main()
{
std::string s("Hello, world!\n");
std::fwrite(s.data(), 1, s.size(), stdout);
}
出力
Hello, world!
関連項目
名前 | 説明 |
---|---|
c_str |
C 言語での文字列表現を取得する |