为什么我不必在类中转发声明函数或变量?

iFr*_*cht -1 c++ variables class function c++11

原始问题可以在下面找到.

所以,我们发现以下内容不起作用:

void f(){
    g();
}
void g(){}
Run Code Online (Sandbox Code Playgroud)

但是,它确实在一个类工作,这就是我困惑的地方:

class test{
   int getY(){
       return getX();
   }
   int getX(){
       return 10;
   }
}
Run Code Online (Sandbox Code Playgroud)

这在MSVC10.0下编译得非常好.

Ideone链接.它确实有效.

因此,在重新措辞之后,问题是:

为什么我不需要在课堂内进行前向声明?

原始问题,请忽略

在C++中,声明函数或变量的顺序根本不重要.调用尚未声明的函数没有任何问题.这同样适用于变量:

但是,它不适用于课程.如果我想使用稍后在源文件中定义的类,我必须转发声明它.

为什么?什么阻止编译器知道所有类声明?

wol*_*k88 6

在C++中,声明函数或变量的顺序根本不重要.调用尚未声明的函数没有任何问题.这同样适用于变量.

......那根本不是真的吗?您需要在使用它们之前声明函数和变量,否则编译器对您不会特别满意.

编辑为了回应编辑,您所展示的是一个非常特殊的情况,其中涉及的所有内容都是类的内部.在这种特殊情况下,您可以使用未声明的变量和函数名称.您可以这样做的唯一原因是编译器将类定义视为一个单元,并在编译之前读取所有类.但是,一般来说,你必须转发声明一切.