C++的一个问题?
#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()
函数后这个临时量会被程序销毁吗?
不知道函数外使用这个临时量合不合法
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
合法。func 并不知道它参数是否是临时变量。所以维护其生命周期是调用者的责任。
临时变量是在对表达式
cout<<func("abc")<<endl
求值时建立的。那么会在整个表达式求值结束之后(而不是 func 调用完成之后)销毁。所以在cout
的时候临时变量还在。临时变量销毁的时候输出已经结束了。class.temporary/4 :
合法呀,函数的返回值是一个右值,<<是接受右值的呀