C ++返回stringstream.str()

时间:2011-09-21 01:20:43

标签: c++ return-value stringstream

我有一个静态方法,应该返回下一个可用的id。其他类中的几个静态成员调用此函数,因此每个成员都会分配不同的id。但是,当我打印指定的值时,我不会得到“id0”,“id1”,而只是像“*”这样的符号。我正在使用此代码:

    int A::i = 0; //static member

std::string A::id()
{
    std::stringstream sst; 
    sst<< "id" << A::i;

    i++;

    return sst.str(); //i've tried to return a const char* too, but doesnt work either
}


   //assigning id's in several classes like this: 
   const char* B::id = A::id().c_str(); 
   const char* C::id = A::id().c_str(); 


   //printing them in the main function: 
   std::cout << B::id << " " << C::id << "\n";

我不明白为什么上面的代码不起作用。当我执行以下代码时,将打印预期结果“id10”:

    static std::string  gt()
    {
         std::stringstream ss; 
         ss << "id" << 10;

         return ss.str();
    }

1 个答案:

答案 0 :(得分:6)

看看

const char* C::id = A::id().c_str(); 

您正在创建一个新的id字符串,然后您获取一个指向其数据的指针(作为一个C字符串),然后在此之后,您指向的内容的临时字符串将被销毁。简单回答:要么坚持std::string,要么坚持int ids。