关于引用作为右操作数出错的问题

One-_-Piece 2013-06-08 04:23:09
string& getStr()
{
string str = "TEST";
return str;
}
int main()
{
string str = getStr(); //ERROR

return 0;
}


求解答为什么会出错??
...全文
54 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjwzcnjsy 2013-06-08
  • 打赏
  • 举报
回复
引用 5 楼 aytfly 的回复:
[quote=引用 3 楼 zjwzcnjsy 的回复:] [quote=引用 2 楼 aytfly 的回复:] [quote=引用 1 楼 godenkiss 的回复:] 局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
明白了,多谢。 另外,请教:函数体内动态创建string怎么实现?[/quote] string str = new string;[/quote] 你这个有误,得是*str吧,这是用指针创建,再返回*str,我知道这样可以实现。 这就是一楼说的动态创建吗[/quote] 额。好久没打代码。眼戳。居然没意识到错误!
One-_-Piece 2013-06-08
  • 打赏
  • 举报
回复
引用 4 楼 godenkiss 的回复:
[quote=引用 2 楼 aytfly 的回复:] [quote=引用 1 楼 godenkiss 的回复:] 局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
明白了,多谢。 另外,请教:函数体内动态创建string怎么实现?[/quote] 首先,可以实现,但极度不推荐.

string& getStr() 
{     
    string *pStr = new string("TEST");     
    return *str; 
}
没有任何使用都可以预期 getStr() 内部调用new进行动态分配, 这几乎总是会造成内存不能正确释放. 正常的做法有以下两种: 代码就不写了 1. 返回对象而不返回引用, 这种返回方法往往不可避免的成功首选. 2. 返回 local static 对象的引用. 这种方法可行,但不适用于多线程环境下.[/quote] 明白了,果然厉害!! 这些东西也都学过,但是没想到。不返回引用当然是知道的,就是想弄明白为什么不能用引用。 多谢~~
Qt讷讷熊 2013-06-08
  • 打赏
  • 举报
回复
引用 5 楼 aytfly 的回复:
[quote=引用 3 楼 zjwzcnjsy 的回复:] [quote=引用 2 楼 aytfly 的回复:] [quote=引用 1 楼 godenkiss 的回复:] 局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
明白了,多谢。 另外,请教:函数体内动态创建string怎么实现?[/quote] string str = new string;[/quote] 你这个有误,得是*str吧,这是用指针创建,再返回*str,我知道这样可以实现。 这就是一楼说的动态创建吗[/quote] 对, 随手打的代码,不甚规范.
One-_-Piece 2013-06-08
  • 打赏
  • 举报
回复
引用 3 楼 zjwzcnjsy 的回复:
[quote=引用 2 楼 aytfly 的回复:] [quote=引用 1 楼 godenkiss 的回复:] 局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
明白了,多谢。 另外,请教:函数体内动态创建string怎么实现?[/quote] string str = new string;[/quote] 你这个有误,得是*str吧,这是用指针创建,再返回*str,我知道这样可以实现。 这就是一楼说的动态创建吗
Qt讷讷熊 2013-06-08
  • 打赏
  • 举报
回复
引用 2 楼 aytfly 的回复:
[quote=引用 1 楼 godenkiss 的回复:] 局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
明白了,多谢。 另外,请教:函数体内动态创建string怎么实现?[/quote] 首先,可以实现,但极度不推荐.

string& getStr() 
{     
    string *pStr = new string("TEST");     
    return *str; 
}
没有任何使用都可以预期 getStr() 内部调用new进行动态分配, 这几乎总是会造成内存不能正确释放. 正常的做法有以下两种: 代码就不写了 1. 返回对象而不返回引用, 这种返回方法往往不可避免的成功首选. 2. 返回 local static 对象的引用. 这种方法可行,但不适用于多线程环境下.
zjwzcnjsy 2013-06-08
  • 打赏
  • 举报
回复
引用 2 楼 aytfly 的回复:
[quote=引用 1 楼 godenkiss 的回复:] 局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
明白了,多谢。 另外,请教:函数体内动态创建string怎么实现?[/quote] string str = new string;
One-_-Piece 2013-06-08
  • 打赏
  • 举报
回复
引用 1 楼 godenkiss 的回复:
局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为
明白了,多谢。 另外,请教:函数体内动态创建string怎么实现?
Qt讷讷熊 2013-06-08
  • 打赏
  • 举报
回复
局部变量超出生存期就自动销毁了, 最后得到的是一个悬吊的引用. 函数体内动态创建的或全局的, 这样返回才有意义. 函数返回一个 local对象的指针或引用,问题错误的,对两者的使用都是未定义的行为

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧