函数参数名称的作用域
Scope of function parameter name
c++中函数参数名的作用范围是什么?我发现这个作用域是
function prototype scope
但是函数原型作用域是什么意思?
你所指的文本(我假设)是:
3.3.4函数原型作用域[basic.scope.]原型)1在函数声明中,或在任何函数声明中,除了a的声明符函数定义(8.4),参数名(如果提供)有函数原型作用域,它在最近的结束处终止封闭函数声明符。
在函数声明中,例如void foo(int x, int y);
,参数x
的作用域,按照3.3.2
,紧接在它的完整声明符之后(即紧接在x
之后)。它的作用域结束于封闭函数声明符的末尾,即结束声明的;
。
在讨论函数定义时,参数的作用域是块作用域(重点是我的):
3.3.3块作用域[basic.scope]本地)
1在块中声明的名称(6.3)是该块的局部名称;它有块范围。它的潜在作用域从声明点开始(3.3.2),并在其块的末端结束。在块中声明的变量作用域是一个局部变量。
2 函数形参名的潜在作用域(包括一个)出现在lambda声明器()或函数局部预定义中(8.4) 从它的点开始声明。如果函数有函数,try-block数名不能在函数的最外层块中重新声明类关联的任何处理程序的最外层块中没有定义 function-try-block .
基本上,它表示形参的作用域以定义的右括号结束
来自c++ 2011国际标准
3.3.4函数原型作用域[basic.scope.proto]例如,1在函数声明中,或在任何函数声明中,除了a的声明符函数定义(8.4),参数名(如果提供)有函数原型作用域,它在最近的结束处终止封闭函数声明符。
auto bar(void (*x)(int y)) -> decltype(y);
是非法的,因为y
的作用域结束于void (*x)(int y)
(最近的封闭函数声明符)的末尾。
void bar(auto (*x)(int y) -> decltype(y));
是合法的。
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 创建从外部作用域重新声明模板参数的typedef的负面影响
- 当我把一个方法作为参数传递时,我怎么能忽略作用域呢
- C/ c++中数组的参数传递和作用域
- 在包含作用域的函数调用期间持续的临时函数参数
- 函数参数名称的作用域