首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c++函数将返回值放在哪里

c++函数将返回值放在哪里
EN

Stack Overflow用户
提问于 2017-06-30 20:41:25
回答 2查看 169关注 0票数 0

让我们来看看这段代码。我认为c++函数在eax中只返回一个int值。那么它在哪里存储向量结果呢?堆?堆栈?

谢谢

代码语言:javascript
运行
复制
#include <iostream>
#include <vector>

using namespace std;


vector<int> fonction(int a)
{
        vector<int> vec;
        for (int i=0;i<a;i++)
        {
                vec.push_back(1);
        }
        return vec;
}

int main(int argc, char *argv[])
{
        cout << "test" << endl;
        auto res = fonction(10);
        cout << res.size() << endl;
        return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2017-06-30 20:45:31

就寄存器而言,C++标准没有指定哪些寄存器应该包含该值,因为该标准不依赖于体系结构。它只是定义了语言的语法和语义

至于在函数中创建向量时会发生什么,向量的内容存储在堆中(像往常一样),向量本身(即指针和其他记账)存储在函数的栈帧中。

当您通过值从函数返回向量时,返回值被视为r值,并且该r值将被保证移动到已在main中分配的向量中(即指针和其他记账)。

注意,有一种叫做NRVO的东西,如果编译器能够应用它的话。没有移动,值只是从函数的堆栈中取出,并放在它需要去的地方。

好的,从一个函数返回一个向量类型正确吗?

当然,这完全没问题

票数 2
EN

Stack Overflow用户

发布于 2017-06-30 20:51:20

看起来像x86_64的gcc在调用者的堆栈上分配返回向量结构,并在rax中返回指向它的指针。

代码语言:javascript
运行
复制
movq    -48(%rbp), %rax
...
ret
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44846747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档