我们知道编译器可以重用相同的常量字符串文字来有效地节省内存。这种优化对于编译器是可选的。
const char *s1 = "HELLO";
const char *s2 = "HELLO";
s1
并且s2
可以有相同的地址。它们在许多编译器中具有相同的地址。例如,两者都指向地址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
有两个不同的地址。
技术上不可能吗?语言禁止?还是标准库实现的开发人员不想要它?