❤恋するコンピュータサイエンス❤

コンピュータサイエンス、3DCGをもっと楽しく、もっと本質的に!c言語、c++の記事中心です

文字列リテラル std::string c++

下記C言語での文字列リテラル
char *str
str = "abcdefg"
変数宣言時はポインタ変数、(もしくは配列)に格納する必要がある。


下記C++ での文字列リテラル

std::string str;

str="abcdefg";
string というクラスを宣言するだけで、ポインタ宣言が必要なくなる。

string という型ではなく、stringというクラスを宣言していてそのオブジェクトでstrという変数を宣言している事に注意しよう
C言語ではポインタだが、C++ではstring というクラスを宣言するだけで変数に格納することができる。これは
std::string型の内側には、動的にメモリ割り当てを行う char の配列が入っています。
そして、必要なタイミングでメモリ の割り当てを行い、不要になれば解放 を行うという操作が行われる。
 

そのため、std::string を使うと、文字列の実際の長さを気にする必要がなくなります。

C言語であれば、メモリの管理を自力で行う必要がありますが、これが自動化されるからです。

 

補足

文字列リテラル "string" は const char[] なので書き換えられる可能性があるとコンパイルエラーになる。
コンパイルエラーを起こさない為に参照元にconst をつけて値を書きかえない事を伝える。

参照)

文字列 | Programming Place Plus C++編【言語解説】 第4章