在C ++中,返回变量时会发生什么?

时间:2010-05-29 14:10:55

标签: c++ return-value copy-constructor

当返回变量时,一步一步地发生什么。我知道如果它是内置的并且适合,它会被抛入rax / eax / ax。当它不适合和/或不是内置时会发生什么?更重要的是,是否有保证的复制构造函数调用?

编辑:析构函数怎么样?那被称为“有时”,“总是”还是“从不”?

2 个答案:

答案 0 :(得分:7)

存储返回值的位置完全取决于calling convention,并且非常符合架构和系统。

允许编译器忽略对复制构造函数的调用(即,它不必调用复制构造函数)。请注意,从函数返回值也可能会调用赋值运算符,具体取决于函数返回值的作用。

答案 1 :(得分:2)

如果函数/方法返回类型是引用,则实际上不会发生复制。如果它是非引用返回类型,则根据平台的调用约定,可能会发生 副本。

在富含寄存器(通常为RISC)的体系结构中,可能会有大量的寄存器分配来保存适度大的返回结构。这是为了避免与缓存/寄存器事务相比过多的内存事务。

在x86下降的intel系列中,你的问题暗示你提到的寄存器,它比RISC更有可能调用一个拷贝构造函数。