抱歉,

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

Main.cpp

#include <iostream>
#include "c1.h"

using namespace std;

Classe c(){
    Classe v();
}
int main(){
    cout << c().x;
    return 0;
}

1小时
#include <iostream>

using namespace std;

class Classe{

    public:
        Classe(){
            x = 100;;
    }
    int x;
    };

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

有和没有-wall都没有警告。

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

main.cpp:在函数“Classe c()”中:
main.cpp:8:错误:请求从“经典(*)()”转换为非标量类型“经典”

最佳答案

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

偶然地,用于从函数返回值的寄存器恰好加载了在该函数中分配的局部变量的地址。

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

10-05 18:18