gpt4 book ai didi

c++ - 通过复制返回局部变量 - 它是如何工作的

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:45 26 4
gpt4 key购买 nike

给定下面的示例程序,retlocal1 工作而 retlocal2 不工作。我知道不返回局部变量的引用或指针的规则,但我想知道它是如何工作的。

当 retlocal1 返回时,它会将它的值复制到 EAX?但是 EAX 是一个有足够空间容纳整数的寄存器吗?那么 EAX 如何保存 std::string 的整个拷贝(当然可以是很长的字符串)。

幕后一定有什么我不明白的事吗?

此示例是 C++,但我假设 C 的工作方式完全相同?

#include <string>

std::string retlocal1() {
std::string s;
s.append(3, 'A');
return s;
}

std::string& retlocal2() {
std::string s;
s.append(3, 'A');
return s;
}

int main(int argc, char* argv[]){

std::string d = retlocal1();
std::string e = retlocal2();
return 0;
}

最佳答案

调用约定将指定如何返回对于单个寄存器来说太大的值。小型类型可能会在多个寄存器中返回;通过将“隐藏”指针参数传递给函数来指定返回值的放置位置的大型类型。

如果你想知道所有血淋淋的细节,Wikipedia是一个很好的起点。

关于c++ - 通过复制返回局部变量 - 它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com