xml*_*lmx 6 c++ templates overloading void language-lawyer
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
}
Run Code Online (Sandbox Code Playgroud)
C++ 允许显式返回一个空值,如 所示#1,我认为它是优雅和通用的。
但是,不能以#3相同的方式应用该规则。
为什么 C++ 不允许将 void 参数传递给具有零参数的函数?
因为语言规定调用中的每个参数表达式都会初始化函数的一个参数
当调用函数时,每个形参都用其相应的实参进行初始化。
在无参数函数中,没有要初始化的第一个参数,即使有,void也是一个没有值的类型。
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |