C++ 禁用std:string';s SSO

C++ 禁用std:string';s SSO,c++,string,stdstring,C++,String,Stdstring,我想知道是否有一种方法可以通过编程禁用字符串,使其不使用短字符串的本地缓冲区 由于SSO是一种可选的优化,因此没有标准的方法将其关闭 实际上,您可以保留一个不适合SSO缓冲区的字符串,以强制动态分配缓冲区: std::string str; str.reserve(sizeof(str) + 1); 这似乎至少适用于gcc,而且应该可以移植,因为内部缓冲区需要适合字符串。()您使用的是哪种编译器+标准库实现?另外,“请不要问我为什么需要这个。”完全与这个网站的工作方式背道而驰,让我确信这是一个

我想知道是否有一种方法可以通过编程禁用字符串,使其不使用短字符串的本地缓冲区

由于SSO是一种可选的优化,因此没有标准的方法将其关闭

实际上,您可以
保留一个不适合SSO缓冲区的字符串,以强制动态分配缓冲区:

std::string str;
str.reserve(sizeof(str) + 1);

这似乎至少适用于gcc,而且应该可以移植,因为内部缓冲区需要适合字符串。()

您使用的是哪种编译器+标准库实现?另外,“请不要问我为什么需要这个。”完全与这个网站的工作方式背道而驰,让我确信这是一个.gcc版本5.2.1 20151010,我想libstdc++6:amd64 5.2.1-22ubuntu2std::string没有SSO。这是一个规范。您的实现可能有也可能没有SSO。看看这里:提示:您可以围绕std::vector构建一些东西。使用这种方法有任何已知的缺点吗?@SayantanGhosh显而易见的一点是,禁用优化会失去其性能优势。这里更有趣的问题是:这样做的好处是什么?如果您的代码不支持SSO,但不支持SSO,您最好修复代码,而不是修补症状。我在set-emplace中也遇到了同样的问题:使用字符数组评估手动分配与上述方法相比,因为分配在空闲时带来了一些额外的管理。