gpt4 book ai didi

c++ - sso 是否用于 std::string 以外的任何其他标准库容器?

转载 作者:太空狗 更新时间:2023-10-29 19:56:26 24 4
gpt4 key购买 nike

SSO(小/短字符串优化)可用于 std::string。但是否允许在其他标准库容器中使用它(例如 std::vector)?答案取决于容器的模板参数是内置类型还是用户自定义类型?

最佳答案

更广泛的术语是 SBO - 小型缓冲区优化。 SSO 是特定于字符串的。

无论如何,由于迭代器失效规则,标准库中的大多数其他容器都无法使用 SBO。该标准保证进入容器的迭代器通过移动保持有效。即:

std::vector<T> v = ...;
auto iter = v.begin(); // assume v is non-empty
std::vector<T> new_v = std::move(v);
foo(*iter); // *must* be okay

SBO 无法满足此保证 - 因为 iter可以指向 vs 的自动存储, 它不能神奇地转移到 new_v . std::string没有这种保证,所以没关系。

另一方面,类似 std::function<> 的东西可以(并且通常会)实现 SBO,因为没有这样的移动保证。从容器的角度来看,这并不是真正的容器。

关于c++ - sso 是否用于 std::string 以外的任何其他标准库容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48669413/

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