直接上代码std::string getid()
{
return std::string("aaaa");
}int main(int argc, char* argv[])
{
std::string &sst = getid();
const char *pps = sst.c_str(); //返回 aaaa
const char *pp = getid().c_str(); //未能返回aaaa return 0;
}
通过查看 pps 和 pp的内存,发现两者地址不同求解,感觉很困惑
{
return std::string("aaaa");
}int main(int argc, char* argv[])
{
std::string &sst = getid();
const char *pps = sst.c_str(); //返回 aaaa
const char *pp = getid().c_str(); //未能返回aaaa return 0;
}
通过查看 pps 和 pp的内存,发现两者地址不同求解,感觉很困惑
这里生存周期由于引用的存在变长了
const char *pp = getid().c_str();
生存周期仅限于该语句,该语句后地址就无效了
每次调用getid都会构建新的对象
关于取不到内容的问题是因为getid内是临时对象
函数执行完毕就释放了