梅延涛 2010年10月01日 星期五 18:59 | 1539次浏览 | 0条评论
今天有个同学在xiyoulinux Group
问题大致如下:
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 © 2024
京ICP备05028076号
暂时没有评论