我应该在这个问题前面说我认为答案可能不是,但我想看看其他人对这个问题的看法.
我花了大部分时间编写与Win32 API交互的C++,就像大多数C风格API想要的那样:
这两种情况本质上都意味着如果你想std::string在你的代码中使用,你必须接受这样一个事实,即你每次std::string从临时缓冲区构造一个字符串时都会进行大量的字符串复制.
什么会很好:
std::string并预先保留其分配并提前设置其大小(以缓解方案1)std::string现有的char[](以缓解方案2)有没有一种很好的方法来做其中任何一种,或者我应该接受使用std::string旧学校API 的固有成本?看起来情况1看起来特别棘手,因为它std::string有一个短的字符串优化,因此它的缓冲区可以在堆栈或堆上,具体取决于它的大小.
Lig*_*ica 10
在C++ 11中,您可以简单地将指针传递给string(&str[0])的第一个元素:它的元素保证是连续的.
以前,您可以使用.data()或.c_str()但字符串不可通过这些.
否则,是的,您必须执行副本.但是我不会太担心这个,直到分析表明这对你来说真的是一个问题.