何时是函数参数并返回构建值
When are function arguments and return values constructed?
我继续阅读有关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/
,它可能会发生。我从不相信...
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 函数向量_指针有不同的原型,我可以构建一个吗
- 我需要在 Android Studio 中构建 NDK. 但它返回一个错误
- 从替代方案构建的变体中返回构造
- 在静态函数中返回对象而不是构建对象的优点是什么?
- 通过值和参考,对象构建返回对象之间的区别
- ITK中是否有表面构建函数,该函数返回一个容器管空间对象
- 在C 中以通用方式构建对象,设置字段并返回对象
- 计数器函数不基于以前返回的值构建
- 何时是函数参数并返回构建值
- 如何检查忍者并行构建的返回值
- C++从函数调用的多个返回中构建字符串向量的最佳方法
- 正在打印字符串构建函数的输出,但未返回预期结果
- c++构建器xe2上更不稳定的行为:DYNAMIC_CAST总是返回NULL
- 在Visual c++ 2013中,对于x64构建,std::exp of float负无穷返回负无穷
- 当从固定结构体中存储的对象构建函数时,c++ lambda构建静态函数返回意外值
- 递归函数构建一个向量,会返回什么
- new(size, value) Type[0]返回的指针是否合法,是否可以用来构建数组?