St.*_*rio 3 c++ scope function
我写了以下内容:
#include <stdio.h>
int foo(int x, int y=2*x)
{
return y;
}
int main()
{
printf("%d\n",foo(5));
}
Run Code Online (Sandbox Code Playgroud)
但我有编译时错误error: local variable ‘x’ may not appear in this context
但是我预计它会没问题,因为3.3.4/1:
在函数声明中,或除函数定义(8.4)的声明符之外的任何函数声明符中,参数名称(如果提供)具有函数原型作用域,该作用域终止于最近的封闭函数声明符的末尾.
结束最近的封闭函数声明符,声明}点紧跟在之后int x.那为什么它不起作用?
这不是因为范围.8.3.6/7说
局部变量不得用于默认参数.
并且8.3.6/9:
每次调用函数时都会计算默认参数.函数参数的评估顺序是未指定的.因此,函数的参数不应在默认参数中使用,即使它们未被评估.在默认参数之前声明的函数的参数在范围内,并且可以隐藏命名空间和类成员名称.
禁止这样做是有道理的,因为函数参数的评估顺序是未指定的.y如果2*x在论证之前评估是什么价值x?
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |