| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 590 人关注过本帖
标题:帮忙看看!谢谢了
只看楼主 加入收藏
tymstill
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-1-28
结帖率:100%
收藏
 问题点数:0 回复次数:5 
帮忙看看!谢谢了
//strquote.cpp -- different designs
#include <iostream>
#include <string>
using namespace std;
string version1(const string & s1,const string & s2);
const string & version2(string & s1,const string & s2);  //has side effect
const string & version3(string & s1,const string & s2);  //bad design

int main()
{
   string input;
   string copy;
   string result;
   
   cout<<"Enter a string: ";
   getline(cin,input);
   copy=input;
   cout<<"Your string as entered: "<<input<<endl;
   result=version1(input,"***");
   cout<<"Your string enhanced: "<<result<<endl;
   cout<<"Your original string: "<<input<<endl;
   
   result=version2(input,"###");
   cout<<"Your string enhanced: "<<result<<endl;
   cout<<"Your original string: "<<input<<endl;
   cout<<"Resetting original string.\n";
   input=copy;
   result=version3(input,"@@@");
   cout<<"Your string enhanced: "<<result<<endl;
   cout<<"Your original string: "<<input<<endl;
   
   system("pause");
   return 0;
   
}

string version1(const string & s1,const string &s2)
{
       string temp;
      
       temp=s2+s1+s2;;
       return temp;
       }
      
const string & version2(string & s1,const string & s2)
{
      s1=s2+s1+s2;
      return s1;
      }

const string & version3(string & s1,const string & s2)       //这个函数的错误在哪里?
{                                                            //书上说存在一个致命的错误:返回一个指向version3()中声明的变量的引用.具体的说,
                                                            //问题是由于下面的复制语句引发的:result=version3(input,"@@@");程序试图引用已经
                                                            //释放的内存
                                                            //不明白????高手能详细解释一下吗?
       string temp;
      
       temp=s2+s1+s2;;
       return temp;
       }

[[it] 本帖最后由 tymstill 于 2008-4-17 16:31 编辑 [/it]]
搜索更多相关主题的帖子: different include result Enter 
2008-04-17 16:11
Welton
Rank: 2
等 级:论坛游民
帖 子:65
专家分:38
注 册:2006-10-25
收藏
得分:0 
string temp;这个是函数中声明的,在函数退出后会释放它的内存空间,那么你再引用它的内存,就会出现错误了。

只是喜欢编程而已!
2008-04-17 16:22
tymstill
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-1-28
收藏
得分:0 
那跟第一个string version1(const string & s1,const string &s2)
{
       string temp;
      
       temp=s2+s1+s2;;
       return temp;
       }
有什么区别吗?
2008-04-17 16:30
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
第一个会产生临时对象,第三个不会

樱花大战,  有爱.
2008-04-17 16:55
tymstill
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2008-1-28
收藏
得分:0 
为什么第一个会产生临时变量,第二个不会呢?是不是前面多了个const呢?
2008-04-18 08:51
herolzx
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-25
收藏
得分:0 
首先你得明白什么是 call_by_reference
然后明白,变量的作用域。
string version1(const string & s1,const string &s2)
{
       string temp;//作用域只在花括号之间
      
       temp=s2+s1+s2;;
       return temp;//返回的是temp的副本,如果返回饮用,就出现逻辑错误,因为,temp已经消失了。
       }
2008-04-18 11:33
快速回复:帮忙看看!谢谢了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016639 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved