C++函数,不返回返回数据

C++ function without return returning data

本文关键字:返回 数据 函数 C++      更新时间:2023-10-16

对不起,

我在玩c++,我做了一些奇怪的事情,它起了作用,有人知道它为什么起作用。

主要.cpp

#include <iostream>
#include "c1.h"
using namespace std;
Classe c(){
    Classe v();
}
int main(){
    cout << c().x;
    return 0;
}

c1.h

#include <iostream>
using namespace std;
class Classe{
    public:
        Classe(){
            x = 100;;
    }
    int x;
    };  

那么,如果函数Classe c(){Classe v()}不返回变量,为什么我可以调用c().x呢?

有墙和没有墙都没有警告。

如果我在函数上返回v,它就不会编译:返回错误消息:

main.cpp:在函数"Classe c()"中:main.cpp:8:错误:从"Classe(*)()"到非标量类型"Classe"的转换请求

我认为这是偶然的,您的编译器应该警告您c()不会返回值。

意外地,用于从函数返回值的寄存器碰巧加载了该函数中分配的局部变量的地址。

顺便说一句,函数c()中局部v()的声明并没有声明Classe类型的变量,而是声明一个不带参数的函数,返回一个Classe类型的对象。

编译器不一定知道c没有返回有效对象(它可以在远离main的地方定义)。不过,编译c时会收到编译器警告。