Почему типы элементов должны быть объявлены вперед, а функции-члены не нужны? - PullRequest
2 голосов
/ 01 мая 2020
struct A
{
    void f1()
    {
        f2(); // ok, though f2() is not declared before
    }

    void f2()
    {}

    void f3(X*) // error: unknown type name 'X'
    {}

    struct X
    {};
};

int main()
{
    A a;
}

Почему типы элементов должны быть объявлены вперед, а функции-члены нет?

1 Ответ

5 голосов
/ 01 мая 2020

Это связано с контекстом полного класса . Когда вы находитесь в теле функции-члена, класс считается завершенным и может использовать все, что определено в классе, независимо от того, где в классе он объявлен.

Параметры функции не являются частью этого контекста поэтому они должны быть типами, о которых известно в тот момент, когда вы пытаетесь их использовать.

...