コンパイラは同一の定数文字列リテラルを再利用してメモリを効率的に節約できることがわかっています。この最適化は、コンパイラではオプションです。
const char *s1 = "HELLO";
const char *s2 = "HELLO";
s1
s2
同じアドレスを持つことができます。多くのコンパイラで同じアドレスを持っています。たとえば、どちらも address を指しています0x409044
。
良い。
私の頭の中の質問は、なぜstd::string
同じ利点を得ようとしないのですか? std::string
そして、そのアドレスをラップするだけではありません。
const std::string ss1("HELLO");
const std::string ss2("HELLO");
cout << (void*) ss1.c_str() << endl;
cout << (void*) ss2.c_str() << endl;
ss1
ss2
2 つの異なるアドレスを持っています。
技術的に不可能ですか?言語で禁止されていますか?それとも、標準ライブラリの実装の開発者はそれを望んでいないのでしょうか?