3
我们可以从std :: string的c_str()获得什么性能?总是恒定的时间?
我最近一直在做一些必要的优化。我一直在做的一件事是更改一些ostringstreams-> sprintfs。我正在将一堆std :: strings冲刺到ac样式数组,ala char foo[500]; sprintf(foo, "%s+%s", str1.c_str(), str2.c_str()); 事实证明,Microsoft的std :: string :: c_str()实现在恒定时间内运行(它只返回一个内部指针)。看来libstdc ++也是一样。我意识到std不能保证c_str,但是很难想象另一种方式。例如,如果他们将其复制到内存中,要么不得不为缓冲区分配内存(将其留给调用方销毁,而不是STL合同的一部分),要么必须将其复制到内部静态对象中。缓冲区(可能不是线程安全的,并且您无法保证其寿命)。因此,仅返回指向内部维护的以null终止的字符串的指针似乎是唯一可行的解决方案。