模板参数的潜在范围是什么
What is the potential scope of a template parameter?
ISO 草案 n3290 第 3.3.9 节第 5 段中的一点:
因为模板参数的名称无法在其潜力范围内重新声明 作用域 (14.6.1),模板参数的作用域通常是其潜在作用域。然而 模板参数名称仍然可以隐藏;
在这种情况下,"潜在范围"是什么意思?谁能举个例子?
草稿链接 N3290:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3290.pdf
3.3.1 : 声明的范围是 与其潜在范围相同,除非 潜在范围包含另一个 同名声明。在那 案例,潜在范围 内部声明(包含) 声明性区域被排除在 声明的范围在 外部(包含)声明性区域。
通常,这是指这样的情况:
void Foo(int i) {
{
int i = 5;
std::cout << i;
}
std::cout << i;
};
第二个i
的潜在范围被排除在第一个i
的范围之外。换句话说,这准确地描述了名称隐藏的适用位置。您引用的位说模板名称也可以隐藏。
来自同一部分的第3段:
模板的潜在范围 参数名称从其点开始 声明 (3.3.2) 并以 其声明性区域的结束。[ 注意:这意味着模板参数可以在后续声明中使用 模板参数及其默认参数,但不能使用 在前面的模板参数中或 它们的默认参数。例如
template<class T, T* p, class U = T> class X { /* ... */ }; template<class T> void f(T* p = new T);
这也意味着 模板参数可用于基类的规范。为 例
template<class T> class X : public Array<T> { /* ... */ }; template<class T> class Y : public T { /* ... */ };
使用模板参数作为 基类意味着使用的类 作为模板参数必须定义 而不仅仅是在类时声明 模板已实例化。——尾注 ]
相关文章:
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- set_intersection范围范围
- 程序中的布尔函数返回输入的范围无论如何都是无效的
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 这个变量在 C++ 中的范围是什么?
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 满足标准::范围::范围概念
- 向量向量的范围范围
- 为什么这个循环变量在循环范围之外是可访问的
- 运算符重载中变量的数据类型和范围应该是什么
- 统一实际分布的范围限制是多少
- 用辅助方法范围范围的问题来操纵字符串
- 用于循环范围范围
- 在C++中实现随机预言机(输出在范围内是随机的,但对于相同的输入输出是相同的)
- 在C++11中,用什么方法对数组进行简单的范围管理是最干净的
- 矢量超出范围/范围检查
- 以一种漂亮的STL方式检查一个范围是否是另一个范围的子范围