#include <iostream>
#include <string>
using namespace std;
const string & func(const string &s)
{
return s;
}
int main()
{
cout<<func("abc")<<endl;
return 0;
}
程序是能执行的
但是 func()
函数合法吗?我知道进入这个函数会创建一个string临时量,并且被s所引用,但是退出 func()
函数后这个临时量会被程序销毁吗?
不知道函数外使用这个临时量合不合法
合法。func 并不知道它参数是否是临时变量。所以维护其生命周期是调用者的责任。
临时变量是在对表达式
cout<<func("abc")<<endl
求值时建立的。那么会在整个表达式求值结束之后(而不是 func 调用完成之后)销毁。所以在cout
的时候临时变量还在。临时变量销毁的时候输出已经结束了。class.temporary/4 :