关于c++中的临时变量

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

其中有这样一个例子:

关于c++中的临时变量
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
    }
}                                    
关于c++中的临时变量

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

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

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

关于c++中的临时变量
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,而是因为其可能随时销毁。

}
关于c++中的临时变量

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

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

关于c++中的临时变量

上一篇:小程序页面跳转方式


下一篇:开始第一个微信小程序(八)