70,012
社区成员




//楼主需要知道的是返回值返回的过程,
//对于return String(s1 + s2);这句
//首先s1 + s2被计算,然后用此结果为参数调用String的拷贝构造函数将返回值初始化,
//然后才从这个函数return;
//假设这个函数为:
String func( )
{
//假设s1,s1已经在某个地方被定义了
return String(s1 + s2);
}
//会被编译器修改为:
void func(String &result)//这里result是未被初始化的
{
result.String::String(s1 + s2);//这里就是将返回值初始化
return;
}
//同理,而对于这个函数,若具名返回值优化没有打开:
String func( )
{
String temp(s1 + s2);
return temp;
}
//会被编译器修改为:
void func(String &result)
{
String temp(s1 + s2);
result.String::String(tmp);
temp.String::~String();
return;
}
char * test(char *des)
{
char *p;
p=des;
return p;//error,返回局部指针