关键词:临时对象 g++ vs2003
发现问题:有一个函数定义如下
void storeContent(string &title, string &text)
{
//具体实现
}
....
//调用
storeContent(string("plan.txt"),fName);
...
如何程序中有上述实现,在g++下编译会出现问题。
如果将上述调用改为:
...
string title = string("plan.txt");
storeContent(title,fName);
...
错误会消失
但是在vs2003下编译不会出现问题
可能问题原因:string("plan.txt")如何直接用在参数当中,会创建一个临时的对象,但是该临时对象的生命期很短,造成了错误,生命期依赖于编译器的实现,所以会有不同的结果。
string title = string("plan.txt");
会把临时的对象赋值给title对象。
如果使用string title("plan.txt") 只是调用构造函数,会更快一些。