何时是函数参数并返回构建值

When are function arguments and return values constructed?

本文关键字:返回 构建 参数 函数 何时      更新时间:2023-10-16

我继续阅读有关RVO和通过参考值与值的参数。我明白的是:通过参考传递只是句法糖传递指针,并通过价值传递给班级的复制构造函数,以制作原始对象的副本,以便使用该函数。RVO避免为函数的返回值调用复制构造函数。

我理解的我所缺少的是何时按值确切构建参数,而按值返回的对象发生。我认为,按值传递的对象是在实际调用和返回值之前构造在堆栈上的,在返回之前(在RVO的情况下)构建了副本。这是正确的吗?

您的假设几乎是正确的。对于通过价值通过对象是在参数为的位置构建的通常通过,在调用函数之前的某个时候(但是在上一个声明之后),并在之前遭到破坏从功能返回,好像它们是本地变量功能。为了通过参考,对象是构造的在堆栈上(或通常在任何地方建造的地方),并在完整表达结束时破坏。返回值,对象是由调用函数构造的返回语句(但是在本地变量的损坏器之前被称为),并在末端被卡利破坏完全表达。

简短答案:是

长答案:是的,有关更多详细信息,请参见ASM:D

加法信息:参数的评估顺序取决于您的编译器

通常,你是对的。

有一个奇怪的概念"返回值elision"或"复制elision"。本质上,有些编译器足够聪明,可以看到您按价值返回,并且会做到这一切(在某些情况下,我没有发现任何编译器可靠地可靠地,RHR或返回值优化都不是超级有用的。)。

本质上:

std::vector<int> foo();
std::vector<int> bar = foo();

May 实际使用栏内部位置的内存作为返回值。

http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/

,它可能会发生。我从不相信...