我写了以下内容:
#include <stdio.h>
int foo(int x, int y=2*x)
{
return y;
}
int main()
{
printf("%d\n",foo(5));
}
但我有编译时错误error: local variable ‘x’ may not appear in this context
但我预计会没问题,因为 3.3.4/1:
在函数声明中,或在除
函数定义的声明符 (8.4),参数名称(如果
提供)具有函数原型范围,该范围在最后终止
最近的封闭函数声明符。
最接近末尾的封闭函数声明符是}
,声明点紧接在int x
。那么为什么它不起作用呢?
这不是因为范围。8.3.6/7
说
局部变量不得在默认参数中使用。
and 8.3.6/9
:
每次调用函数时都会评估默认参数。函数求值顺序
参数未指定。因此,函数的参数不得在默认参数中使用,
即使他们没有被评估。在默认参数之前声明的函数的参数在范围内
并且可以隐藏命名空间和类成员名称。
禁止这样做是有意义的,因为函数参数的求值顺序是未指定的。会有什么价值y
be if 2*x
将在参数之前被评估x
?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)