在关于优化和代码风格的C++问题中,在优化副本的上下文中,有几个答案提到了"SSO" std::string.在这种情况下,SSO意味着什么?
显然不是"单点登录"."共享字符串优化",或许?
这是节选:
...
std::vector<std::wstring> vecWstr;
vecWstr.emplace_back(L"1");
wchar_t* data1 = vecWstr[0].data(); //<-This pointer needed for future use.
vecWstr.emplace_back(L"2");
wchar_t* data2 = vecWstr[0].data();
if (data1 != data2)
MessageBox(L"Error, not equal.", L"Compare");
Run Code Online (Sandbox Code Playgroud)
MessageBox总是出现。
因此,这里我比较了wstring之前和之后的两个缓冲区.emplace()。以我的理解,它们必须平等。
这里主要关注的是:为什么在启用第二个元素之后vector移动/重新分配第一个内部std::wstring元素?
这个问题是在奇怪的程序行为之后进行调查之后提出的。
如果我在第二秒之前保存了vecWstr[0].data()缓冲区指针,.emplace()则缓冲区指针将过时并且程序的行为不当。
最大的问题是程序中有很多std::vector<std::wstring>,但是它们似乎都按预期工作,到目前为止,只有一个如上所示。
这一切都在MSVS 16.1.5中
问题是:
谁在这里?是否可以std::vector更改/移动其std::wstring元素的内部缓冲区?