首页 > 编程语言 > 详细

关于c++中的临时变量

时间:2014-01-23 18:23:40      阅读:451      评论:0      收藏:0      [点我收藏+]

<The c++ programming Language>中提到的临时变量:见10.4.10节

其中有这样一个例子:

bubuko.com,布布扣
void f(string& s1,string& s2,string& s3)
{
    const char* cs = (s1+s2).c_str();
    cout<<cs;
    if( strlen(cs=(s2+s3).c_str())<8 && cs[0] == a){
         //cs used here
    }
}                                    
bubuko.com,布布扣

刚开始还以为没什么错误,后来经过测试发现,cs中的内容是不确定的。

主要是因为(s1+s2)生成的临时变量在其所在语句执行完毕后已经销毁了,所以保存的字符串对象也不存在了,该内存空间已经被重新分配

但是,下面的代码是正确的:

bubuko.com,布布扣
void f(string& s1, string& s2,string& s3)
{
      cout<<s1+s2;        //可以正常输出,临时变量的生命周期在当前语句
      string s = s2+s3;    //可以正常使用,因为临时变量的内容已经通过拷贝复制函数传递
    
}

void h(string& s1, string &s2,string& s3)
{
     const string& s = s1+s2;  //书中说只能绑定到常量引用,因为这是一个临时变量,并不是因为临时变量一定是const,而是因为其可能随时销毁。

}
bubuko.com,布布扣

但是似乎又和实现有关,参考:
http://msdn.microsoft.com/zh-cn/library/cfbk5ddc(v=vs.90).aspx

http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=939006

关于c++中的临时变量

原文:http://www.cnblogs.com/yysh/p/3530755.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!