【发布时间】:2013-05-06 17:07:32
【问题描述】:
我们知道编译器可以重用相同的常量字符串文字来有效地节省内存。这种优化对于编译器是可选的。
Two string literals have the same pointer value?
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 有两个不同的地址。
这在技术上是不可能的吗?语言禁止?还是标准库实现的开发者不想要它?
【问题讨论】:
-
我认为这是 C++11 标准所禁止的,因为
std::string的这种写时复制实现会在多线程环境中导致问题 -
@AndyProwl:看起来合乎逻辑,如果可能的话,请您显示该段落吗?
-
@Andy 你能给出标准中的段落编号吗?
-
前段时间我有一个类似的问题 - 并得到了很多有趣的讨论stackoverflow.com/questions/2312860/…
标签: c++