Чтобы добавить то, что говорили другие, это один из способов заставить его работать:
#include <stdio.h>
std::string tinker(const char* foo);
int main(void)
{
const char* foo = "foo";
std::string foo2= tinker(foo);
printf(foo2.c_str()); // Prints correctly
return 0;
}
std::string tinker(const char* foo)
{
std::string bar(foo);
return bar;
}
Здесь объект std :: string копируется * через возвращаемое значение, и вы печатаете копиюmain ().
* популярные реализации строк используют такие оптимизации, как подсчет ссылок, которые позволяют избежать фактического копирования строки.Кроме того, в C ++ 0x строковый объект будет перемещен, а не скопирован.