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

Accidently I forgot to return value from function but when I returned reference in function declaration it worked.Why?

本文关键字:函数 引用 返回 起作用 为什么 返回值 忘记 不小心 声明      更新时间:2023-10-16
#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时,返回值的空间中不会放置任何数据。但是,您计划返回的数据可能已经在寄存器中或堆栈中的正确位置,因此调用代码表现出您期望的行为。不过,它仍然没有定义。