其他分享
首页 > 其他分享> > 为什么C不允许将函数参数用作默认值?

为什么C不允许将函数参数用作默认值?

作者:互联网

这是this question的后续工作.在我看来,OP问题中的代码相当合理且明确.为什么C不允许使用前一个参数来定义后一个参数的默认值,如下所示:

int foo( int a, int b = a );

另外,至少在C 11中,可以使用声明的参数类型来确定返回类型,因此以类似的方式使用函数参数并不是闻所未闻的:

auto bar( int a ) -> decltype( a );

因此,问题是:为什么不允许上述foo声明是什么原因?

解决方法:

一方面,这将要求a在b之前求值,但是C(如C)没有定义函数参数求值的顺序.

您仍然可以通过添加重载来获得所需的效果:

int foo(int a, int b)
{ /* do something */ }

int foo(int a)
{ return foo(a, a); }

标签:default-parameters,c,language-lawyer
来源: https://codeday.me/bug/20191010/1887935.html