为什么C ++不允许将void参数传递给具有零参数的函数?

问题描述 投票:5回答:1
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所示,我认为它是优雅而通用的。

但是,该规则不能以相同的方式应用于#3

为什么C ++不允许将void参数传递给具有零参数的函数?

c++ templates overloading language-lawyer void
1个回答
1
投票

因为该语言指定了调用中的每个参数表达式都将初始化该函数的参数,所以>

[expr.call/7]

当调用一个函数时,每个参数都用其相应的参数初始化。

在没有参数的函数中,没有要初始化的第一个参数,即使有,[expr.call/7]是没有值的类型。

© www.soinside.com 2019 - 2024. All rights reserved.