Почему C ++ не позволяет передавать пустой аргумент функции с нулевыми параметрами? - PullRequest
6 голосов
/ 01 мая 2020
void f()
{}

void f(int)
{
    return f(); // #1: ok
}

void g(auto fn)
{
    f(fn());
}

int g1()
{
    return 0;
}

void g2()
{}

int main()
{
    g(g1); // #2: ok
    g(g2); // #3: error
}

C ++ позволяет явно возвращать пустое значение , как показано на #1, я думаю, что это элегантно и обобщенно c.

Однако правило не может быть применено к #3 таким же образом.

Почему C ++ не позволяет передавать пустой аргумент функции с нулевыми параметрами?

1 Ответ

1 голос
/ 01 мая 2020

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

[expr.call/7]

Когда вызывается функция, каждый параметр инициализируется своим соответствующим аргументом.

В функции без параметров нет первого параметра для инициализации, и даже если бы он был, void - это тип без значений.

...