gpt4 book ai didi

c++ - 基于相同 const 文字的 std::string 优化

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:18 26 4
gpt4 key购买 nike

我们知道编译器可以重用相同的常量字符串文字来有效地节省内存。此优化对于编译器是可选的。

Two string literals have the same pointer value?

const char *s1 = "HELLO";
const char *s2 = "HELLO";

s1s2 可以有相同的地址。它们在许多编译器中具有相同的地址。例如,两者都指向地址 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;

ss1ss2 有两个不同的地址。

技术上不可能吗?语言禁止?还是标准库实现的开发人员不想要它?

最佳答案

C++ 标准库类基本上都实现了强值语义,这意味着每个对象都拥有它的所有数据,因此对象的生命周期很容易推断。虽然引用跟踪实现可能是可能的,但它会以相当大的复杂性成本为代价,并且这不符合 C++ 的“不要为你没有要求的东西买单”的理念.

长期以来一直在讨论非拥有类字符串类(如 string_refarray_ref,如果你想搜索的话),这只会是查看 现有字符串。这会给用户带来负担,以确保底层共享数据的生命周期适合应用程序。它可能会在未来成为标准的一部分,但如果您感兴趣,请搜索现有的实现。

关于c++ - 基于相同 const 文字的 std::string 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16403626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com