梅延涛

梅延涛的博客

他的个人主页  他的博客

函数返回值和临时对象

梅延涛  2010年10月01日 星期五 18:59 | 1441次浏览 | 0条评论

今天有个同学在xiyoulinux Group上提到一段代码VC和GCC编译出的程序运行不同,引出此问题,以前还真没注意过,写在这里记一下。

    问题大致如下:

mystring input();

int main(void)

{

    mystring obj = input();

}

 

    上面的代码,用VC编译后运行,obj会调用复制构造函数来构造自己;而用GCC的化,obj对象就是在input()里return的那个对象本身。

    之前看大部分教材上都提到,函数返回值会被当作一个临时对象来处理,今天查了下C++标准(n1905)发现,未必如此。标准12.2 Temporary objects中给出了类似例子:


X f ( X );
void g ()
{
X a (1);
X b = f ( X (2));
a = f ( a );
}

并解释道:

    Also, a temporary might be used to hold the result of f(X(2)) before copying it to b using X’s copy-constructor; alternatively, f()’s result might be constructed in b.

    也就是说,函数返回值也可直接被构造给将要接收它的对象。

评论

我的评论:

发表评论

请 登录 后发表评论。还没有在Zeuux哲思注册吗?现在 注册 !

暂时没有评论

Zeuux © 2024

京ICP备05028076号