给定下面的示例程序,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;
}