对不起,
我正在玩c ++而且我做了一些奇怪的事情并且它有效,有人知道它为什么有用。
Main.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;
};
那么,为什么我可以调用c()。x如果函数Classe c(){Classe v()}不返回变量?
使用和不使用-wall时没有警告。
如果我确实在它不编译的函数上返回v: 返回错误消息:
main.cpp:在函数'Classe c()'中: main.cpp:8:错误:从'Classe(*)()'转换为非标量类型'Classe'请求
答案 0 :(得分:2)
我认为这是偶然的,你的编译器应该警告你c()不返回值。
意外地,用于从函数返回值的寄存器恰好加载了在该函数中分配的局部变量的地址。
而且,顺便说一下,函数c()中的局部v()声明不会声明类型为Classe
的变量,而是一个不带参数的函数,返回Classe
的对象。
答案 1 :(得分:1)
编译器不一定知道c
没有返回有效对象(它可以远离main
定义)。编译c
时,您会收到编译器警告。