更广泛的术语是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
Run Code Online (Sandbox Code Playgroud)
这种保证是不可能与SBO相遇的 - 因为它iter可能指向自动存储vs,不能神奇地转移到new_v.std::string没有这种保证,所以没关系.
另一方面,类似std::function<> 罐头(通常也会)实施SBO,因为没有这样的移动保证.这不是容器意义上的容器.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |