c ++中函数参数名称的范围是什么?我发现这个范围是
function prototype scope
但是函数原型范围是什么意思?
答案 0 :(得分:2)
来自C ++ 2011国际标准
3.3.4函数原型范围[basic.scope.proto]
1 在函数声明中,或在除声明符之外的任何函数声明符中 函数定义(8.4),参数名称(如果提供)具有 函数原型范围,终止于最近的结尾 封闭函数声明符。
例如,
auto bar(void (*x)(int y)) -> decltype(y);
是非法的,因为y
的范围在void (*x)(int y)
(最近的封闭函数声明符)的末尾结束。
另一方面,
void bar(auto (*x)(int y) -> decltype(y));
是合法的。
答案 1 :(得分:2)
你正在考虑的文字(我假设)是:
3.3.4函数原型范围[basic.scope.proto]
1在函数声明中,或在除声明符之外的任何函数声明符中 功能定义(8.4),参数名称(如果提供)具有 函数原型范围,终止于最近的结尾 封闭函数声明符。
在函数声明中,例如void foo(int x, int y);
,参数x
的范围是3.3.2
,紧跟在其完整的声明符之后(即紧跟在{{1}之后) })。它的作用域在封闭函数声明符的末尾结束,即结束声明的x
。
在谈论函数定义时,参数的范围是块范围(强调我的):
3.3.3块范围[basic.scope.local]
1块(6.3)中声明的名称是该块的本地名称;它有 阻止范围。它的潜在范围始于其声明点 (3.3.2)并在其块结束时结束。块处声明的变量 scope是局部变量。
2 函数参数名称的潜在范围(包括一个 出现在 lambda-declarator )或函数本地预定义中 函数定义中的变量(8.4)从它的角度开始 宣言。如果该函数具有 function-try-block 的潜力 参数范围或函数本地预定变量的结尾 最后一个关联处理程序的结尾,否则它在结尾处结束 函数定义的最外面的块。参数名称 不得在该函数的最外层重新声明 定义也不在与a关联的任何处理程序的最外面的块中 功能试块
基本上,它表示参数的范围以定义的右括号结束。