Javaでしばらく過ごした後、C ++に戻ることにしました。今では、C++で文字列がどのように機能するかについてかなり混乱しています。
まず、次の関数があるとします。
void fun() {
int a = 1;
Point b(1,2);
char c[] = "c-string";
}
私が理解しているように、a
そしてb
スタックに割り当てられています。c
(ポインタ)もスタックに割り当てられますが、コンテンツ( "c-string")はヒープ上で問題なく動作します。
Q1:機能終了時に内容がc
自動的に割り当て解除されますか?fun
次に、C++があるとしましょうstring
。
void fun2() {
(1) string s = "c++ string";
(2) s += "append";
(3) s = "new contents";
(4) s = "a" + s + "c";
}
文字列のドキュメントは、文字列がどのように機能するかについてあまり具体的ではないため、ここに質問があります。
Q2:終了後、内容はs
自動的に割り当て解除されfun2
ますか?
Q3: 2つの文字列を連結するとどうなりますか?メモリ使用量を気にする必要がありますか?(2行目)
Q4:文字列の内容を上書きするとどうなりますか(3行目)-メモリについてはどうですか?心配する必要がありますか?最初に割り当てられたスペースは再利用されますか?
Q5:このような文字列を作成するとどうなりますか(4行目)。高いですか?文字列リテラル("a"
、"c"
)は(Javaのように)プールされますか、それとも最終的な実行可能ファイル全体で繰り返されますか?
私が最終的に学ぼうとしているのは、C++で文字列を正しく使用する方法です。
これを読んでくれてありがとう、
Queequeg