我的问题可以归结为,从stringstream.str().c_str()实时内存返回的字符串在哪里,为什么不能将其分配给const char*?
此代码示例将比我更好地解释它
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
int main()
{
    stringstream ss("this is a string\n");
    string str(ss.str());
    const char* cstr1 = str.c_str();
    const char* cstr2 = ss.str().c_str();
    cout << cstr1   // Prints correctly
        << cstr2;   // ERROR, prints out garbage
    system("PAUSE");
    return 0;
}
stringstream.str().c_str()可以分配给这个假设的假设const char*导致了一个错误,导致我花了一些时间来追踪。
对于奖励积分,任何人都可以解释为什么将cout语句替换为
cout << cstr            // Prints correctly
    << ss.str().c_str() // Prints correctly
    << cstr2;           // Prints correctly (???)
正确打印字符串?
我正在Visual Studio 2008中进行编译。
str()以RVO可以踢入的方式(非常有可能)实现,则允许编译器直接构造结果进入tmp,消除临时;启用优化后,任何现代C ++编译器都将这样做。当然,bind-to-const-reference解决方案可确保不进行复制,因此可能更可取-但我认为仍然值得澄清。