using声明不能在函数作用域中重复.为什么
A using-declaration can not be repeated in function scope. Why is that?
在[namespace.udcl]/10中,您有以下示例:
namespace A {
int i;
}
namespace A1 {
using A::i;
using A::i; // OK: double declaration
}
void f() {
using A::i;
using A::i; // error: double declaration
}
这个代码段在clang中编译。
第一个是命名空间内的声明,使用#includes可能会频繁发生多个using语句。第二个是在函数的定义中,除非你犯了错误,否则你永远不会这么做。例如,同一个符号也不能定义两次,但可以声明多次。
using语句也不仅仅是一个声明。它更强一点,因为它将函数从一个命名空间导入到另一个命名空间。例如,它可以将受保护的基类成员函数拉入派生类,使其公开。这几乎是一个链接的定义。
相关文章:
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 为什么 for 循环不能定义两个作用域的变量?
- 为什么作用域枚举默认支持运算符'<'?
- 为什么要编译无作用域枚举的声明?
- C++循环、作用域和堆栈(为什么这样做?
- 为什么函数作用域不允许类前向声明?
- 为什么离开作用域后仍然有对结构的有效访问
- C++为什么我需要在扩展类中指定函数的作用域
- 为什么内联函数看不到作用域内部?
- 为什么编译器对此模板存在作用域问题
- 为什么 noexcept 说明符的作用域不在声明的方法内?
- 当const-referencelifetime是当前作用域的长度时,为什么要使用constnon-reference
- 为什么文件作用域静态变量必须初始化为零
- 为什么::(作用域)与空左操作数一起使用
- 为什么可以在没有初始化项的情况下跳转到标量类型对象的作用域?
- 为什么作用域解析对覆盖的变量不起作用?
- 为什么我的方程给出错误必须有一个积分表达式或无作用域enun类型
- 为什么我的HelloWorld函数没有在这个作用域中声明?
- 为什么没有在这个作用域中声明函数
- 为什么我们应该把' std::unique_lock '放在本地作用域下