相关疑难解决方法(0)

为什么C++在声明之前从不允许使用函数?

好的,我知道这看起来像是复制了为什么在使用之前需要声明函数?但似乎现有答案并未完全解决所有细节问题.

我知道C++最初是在80年代设计的,所以它可以在一次通过中翻译,因为计算机很慢.好.但是最新的标准是在2011年发布的,所以我不明白为什么C++编译器现在不能做需要多次传递的事情.它仍然会伤害性能,是的,但只有在它真的变得必要的时候.所以以下内容仍然只需要一次传递:

void foo();
int main() { foo(); }
void foo() {}
Run Code Online (Sandbox Code Playgroud)

而对于以下情况,编译器可以使两个(并且更慢),因为它不知道foo是函数还是类型,直到它看到下面的声明:

int main() { foo(); }
void foo() {}
Run Code Online (Sandbox Code Playgroud)

如果你试图使用一个函数而不首先声明它,并且声明根本不在当前的翻译单元中,那么这将是一个错误.但是如果它在同一个翻译单元中,那么编译器可以只进行额外的传递.

我的同事辩称,这样的功能可以节省大量的开发人员时间,并且可以避免声明和定义不匹配的问题.而且我确信这已被多次提出并且每次都被拒绝.拒绝它的实际原因是什么,即委员会的理由?

c++ compiler-construction declaration c++11

14
推荐指数
1
解决办法
684
查看次数

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

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

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()原因使代码编译。但这种逻辑似乎不适用于类——为什么呢?

c++ language-lawyer

8
推荐指数
1
解决办法
185
查看次数