为什么 C++ 中的类中定义的方法在引用仅稍后出现在类中的方法时不需要前向声明?

dev*_*ium 8 c++ language-lawyer

为什么这是一个编译错误:

void f() {
    g();
}

void g() {

}
Run Code Online (Sandbox Code Playgroud)

但不是这个:

class X {
    void a() {
        b();
    }

    void b() {
        
    }
};
Run Code Online (Sandbox Code Playgroud)

我假设编译器(至少一般来说)会从上到下、从左到右读取代码,这就是在第一段代码中我们需要先定义一个前向声明void g()的f()原因使代码编译。但这种逻辑似乎不适用于类——为什么呢?

Boa*_*ann 3

C 始于 1972 年;C++ 的历史可以追溯到 1985 年。C++ 从 C 继承了前向声明要求和头文件的设计,并保留了该行为以实现兼容性,但能够改进类的功能,而 C 则没有。

  • 正向查找[严重复杂化](http://open-std.org/JTC1/SC22/WG21/docs/cwg_active.html#2335) C++ 特定的功能,如重载解析和推导的返回类型(如果无界,会做得更多) );这并不是为了 C 兼容性而放弃的彻底改进。 (2认同)