gpt4 book ai didi

c++ - 我不小心忘记了从函数返回值,但是当我在函数声明中返回引用时它起作用了。为什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:46 24 4
gpt4 key购买 nike

#include <iostream>
#include<stdlib.h>
using namespace std;

class test{
public:
test(int a):i(a){
}
int display();
private:
int i;
};

int test::display(){
i;
}
int main() {
test obj(10);
cout<<obj.display();
return 0;
}

在上面的例子中,打印了一些随机值。但是当我将函数声明更改为:

int& display();

定义为:

int& test::display(){
i;
}

它显示了正确的值,即 10不知道为什么?

最佳答案

这是未定义的行为,因此一切皆有可能 - 包括您的代码按预期“工作”的可能性。您的编译器应该对此发出警告 - 重要的是将此类警告视为错误,并在测试您的代码之前修复所有报告的问题。

编译器使用堆栈或 CPU 寄存器从函数返回值。当缺少 return 时,没有数据被放置在返回值的空间中。但是,您计划返回的数据可能已经位于寄存器或堆栈中的正确位置,因此调用代码会表现出您期望的行为。不过,它仍未定义。

关于c++ - 我不小心忘记了从函数返回值,但是当我在函数声明中返回引用时它起作用了。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27530906/

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