欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 函数返回值

函数返回值

2025/7/8 3:03:43 来源:https://blog.csdn.net/weixin_51883798/article/details/143784543  浏览:    关键词:函数返回值

引用: 

C++的返回值在内存中的传递过程-CSDN博客

智谱清言的回答

------

函数返回值为基本数据类型

int test()
{int a=1;return a;
}int m = test();

返回值存储:函数返回值通常将被存储在 CPU 的通用寄存器中(如 eax)。

调用者接收:调用该函数的代码可以直接从寄存器中读取返回值。如果返回值太大(如超出寄存器的处理能力),则可能在上分配内存。

------

函数返回值为类对象

示例:

A test()
{A a;//进行操作return a;
}A m = test();

它的操作主要在栈上,变量a在函数结束后会被删除。

为了返回a的值,系统会调用 类A 的拷贝构造函数来创建 a 的一个副本,

把副本返回给调用该函数的表达式,函数调用结束后a的副本便不再存在。

这个副本被存储在 test() 函数的栈帧之外的某个位置,通常是调用者 main() 函数的栈帧上,或者是一个临时对象中。

------

如果a是大的自定义类型的数据,那么对a的复制将会占用比较大的内存。

在处理大型对象或频繁进行拷贝操作的场景下,不合理的拷贝操作会导致严重的性能问题。

------

 当然,在现代编译器中,上述过程通常会被优化,以避免不必要的拷贝。

现代编译器会使用RVO或NRVO,如果这些优化不可行或被禁用,编译器会使用移动构造函数和移动赋值运算符来进行优化。

------

函数返回值是右值,不能对它们进行取地址(&)操作,并且它们不能被用作赋值的左侧操作数

------

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词