goo*_*era 9 c++ string language-lawyer c++11
在C++ 11标准的兼容性附录中,从C++ 03到C++ 11的更改之一描述如下:
C.2.11第21节:字符串库
21.4.1
更改:松开basic_string失效规则
原理:允许小字符串优化.
对原始功能的影响:有效的C++ 2003代码可能在本国际标准中执行不同.某些const成员函数(如data和c_str)不再使迭代器无效.
迭代器失效规则std::string确实已从C++ 03更改为C++ 11,data()并且c_str()不允许再使迭代器失效,但我不知道这是如何导致" allow small-string optimization" 的基本原理的?在C++ 11之前是否已经允许SSO?
std::string在我遇到兼容性附录中的SSO注释之前,我所知道的C++ 11和C++ 03之间的两个区别是:
operator[]不允许使迭代器无效)我采用了C++ 11的非无效保证,c_str()并将其data()作为连续存储更改的直接结果.现在似乎与SSO实现存在一些联系,我想知道幕后逻辑的细节.谢谢.