相关疑难解决方法(0)

在std :: string的上下文中首字母缩略词SSO的含义

关于优化和代码风格的C++问题中,在优化副本的上下文中,有几个答案提到了"SSO" std::string.在这种情况下,SSO意味着什么?

显然不是"单点登录"."共享字符串优化",或许?

c++ string optimization

141
推荐指数
3
解决办法
2万
查看次数

std :: vector <std :: wstring>移动/重新分配内部wstring.data()是否合法?

这是节选:

...
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元素的内部缓冲区?

c++ language-lawyer c++17

3
推荐指数
1
解决办法
98
查看次数

标签 统计

c++ ×2

c++17 ×1

language-lawyer ×1

optimization ×1

string ×1