【问题标题】:A using-declaration can not be repeated in function scope. Why is that?using 声明不能在函数范围内重复。这是为什么?
【发布时间】:2015-09-22 04:35:57
【问题描述】:

在 [namespace.udecl]/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
}

这个 sn-p 在 clang 中编译。

【问题讨论】:

标签: c++ language-lawyer c++14 using-declaration


【解决方案1】:

第一个是命名空间内的声明,多个 using 语句可能经常使用 #includes 发生。第二个是在函数的定义中,除非你犯了错误,否则你永远不会这样做。例如,您也不能将同一个符号定义两次,但可以声明多次。

using 语句也不仅仅是一个声明。它更强大一些,因为它将一个函数从一个命名空间导入到另一个命名空间。例如,它可以将受保护的基类成员函数拉入派生类,使其公开。这几乎是链接的定义。

【讨论】:

  • 您能否提供标准的报价?
  • 这个相关问题的答案解决了这个问题:stackoverflow.com/questions/31224886/… 请注意示例 [namespace.udecl]/10 不正确,刚刚针对我的相关问题进行了更改。
猜你喜欢
  • 2015-09-22
  • 2012-01-04
  • 2018-07-12
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 1970-01-01
相关资源
最近更新 更多