C++ 声明中的显式限定

2024-04-22

当第一个声明被注释掉时,以下命名空间定义无法编译。如果第一个声明foo未注释,那么它编译得很好。

namespace Y
{
    //void foo();
    void ::Y::foo(){}
}

标准中的相关部分(§8.3¶1)说:

当 declarator-id 合格时,声明应引用先前声明的成员

我知道这条规则可以防止将名称引入其他名称空间。我想知道是否可以放宽该规则以允许合格的 IDs 指的是当前命名空间。


CWG #482 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#482是相关的:

根据 8.3 [dcl.meaning] 第 1 段,[...]
此限制禁止如下示例:

void f();
void ::f();        // error: qualified declarator

namespace N {
  void f();
  void N::f() { }  // error: qualified declarator
}

似乎没有任何充分的理由禁止这种行为 声明和许多实现接受它们,尽管 标准的禁止。是否应更改标准以允许 他们?

2006 年 4 月会议记录:

在讨论中第 548 期 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#548,CWG 同意禁止 应删除其名称空间内的合格声明符。

所以如果第一个声明你的代码是有效的foo存在(截至 2012 年左右;GCC 有一个打开错误报告 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64267)。但是,如果不是,您引用的措辞仍然适用,并使合格声明格式不正确。我认为没有理由允许这种情况发生;它直观地意味着该名称已经被声明,因为限定名称查找必须确定它所指的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 声明中的显式限定 的相关文章

随机推荐

  • 未找到 Azure Flask 路由

    我正在使用 Visual Studio 创建一个空白的 Flask 应用程序 当我在本地运行该应用程序时 我得到了预期的 hello world 当我发布到 Azure 应用服务时 我得到了这个丑陋的蓝色主页 这不是我制作的 在我的项目中
  • Zend Framework:发布到不同的操作,如果验证失败并保留表单字段,则返回到原始操作

    这听起来像是一个奇怪的场景 但我在一页上有两个表格 一个只是发回给自己 我在另一个动作中发布了第二篇文章 以保持代码简洁 也许不是正确的选择 我现在遇到的问题是 如果第二个表单未验证 我将重定向回包含该表单的页面 但我不知道如何让表单字段填
  • datepicker 不是 bootstrap 4.1 中的函数

    我正在研究一个domain http ferhan ferohost com 我想在其中单击搜索输入框时使日历可见 我用来放置输入框的 HTML 代码是 div class dates div class start date div di
  • CSV 解析返回“未加引号的字段不允许 \r 或 \n”,但在源文件中找不到错误?

    我在 Rails 应用程序中使用 Ruby 中的内置 CSV 函数 我正在调用一个 URL 通过 HTTParty 来解析它 并尝试将结果保存到我的数据库中 问题是 我收到错误Unquoted fields do not allow r o
  • 在 sqlalchemy 中按 row_number 过滤

    如何在以下查询中过滤 row number 1 query session query Foo func row number over partition by Foo foo field order by desc Foo foo da
  • 应用程序在 Mac OS X 上使用 Apple 的 Java 6 而不是 Oracle 的 Java 7?

    我正在使用安装了 Oracle Java 7 的 Mac OS X 测试我当前的应用程序 它使用的是 Apple 的 Java 6 而不是 Oracle 的 Java 7 系统默认输出为java version正在显示7 我尝试了不同网站中
  • 如何比较两个查询?

    当两个查询 X 和 Y 在小案例场景中花费几乎相同的时间时 如何比较两个查询 X 和 Y 并说 X 比 Y 更好 问题是我有两个查询应该在一个非常大的数据库上运行 所以运行和评估不是一个很好的选择 因此 我们创建了一个小型数据库来执行一些测
  • 两个大整数相乘是否需要强制转换?

    假设您有两个大整数并且您想要将它们相乘 int a 150000 int b 200000 Operation 1 Incorrect Overflows long result a b Operation 2 Correct long r
  • Visual Studio 2010环境变量

    我在 Windows 中设置了一个名为 SDK 的环境变量 我可以在 csproj 文件中以某种方式使用它吗 就像是
  • 如何完全摆脱 Activity 的 GUI(避免黑屏)

    我正在尝试编写一个非常简单的应用程序 它只执行一个非常简单的非 GUI 操作 然后显示一条短消息 使用 toast 在屏幕上已有的内容 例如主屏幕 之上 然后完成 就这样 这几乎有效 但应用程序启动后我仍然会出现短暂的黑屏 然后返回主屏幕
  • 在运行时访问注释

    我怎样才能访问main无论check in the Sample类是真还是假 我应该在主类中写什么 package annotation import java lang annotation Retention import java l
  • 具有多个控件的列表框

    有人可以帮我创建一个带有复选框和星级控件水平对齐的列表框吗 我想要使 用 C 和 XAML 的 WP7 您需要编写一个自定义列表 这里是一个示例 您需要包含控制工具包 xmlns ControlsToolkit clr namespace
  • 使用亚音速交易

    在我的网络应用程序中 我必须对用户操作进行审核 因此 每当用户执行操作时 我都会更新执行操作的对象并保留该操作的审核跟踪 现在 如果我先修改对象 然后更新审计跟踪 但审计跟踪失败了 那么怎么办 显然我需要回滚对已修改对象的更改 我可以在简单
  • 如何在 Qt 5.3 中将 QByteArray 转换为字符串?

    我正在使用一些函数来转换QVector s to QByteArray s 例如 QByteArray Serialize serialize QVector
  • 错误:MyDocument.getInitialProps()”应该解析为带有“html”属性的对象,该属性设置有有效的 html 字符串(在 document.js 中)

    现在我正在用react nodejs nextserver express制作一个迷你项目 发生意外错误 我不知道为什么 document js中会出现错误 如果您知道原因 请告诉我 谢谢 error Error MyDocument ge
  • MVVM 的 ReSharper 警告

    当我使用 WPF 实现 MVVM 模式时 我发现 ReSharper 经常警告我某些属性从未在我的 ViewModel 中使用 问题是它们正在被使用 但仅由数据绑定系统使用 有其他人遇到过这种烦恼吗 有没有办法帮助 ReSharper 意识
  • 当我从服务中调用函数时,“this”未定义

    我的电话上有这个电话component page this timerSessionService startTimer this finish bind this this onSynchronice 嗯 它与this finish 但是
  • 如何禁用Chrome中弹出窗口的位置栏和滚动条?

    对于以下代码 宽度和高度在 Chrome 中有效 但位置和滚动条不起作用 请指导 a href Click Here a 出于安全原因 Chrome 不允许您这样做 隐藏地址栏可以更轻松地假装您是某银行网站 http en wikipedi
  • 日期格式转换 %B %Y

    我们能否以某种方式转换日期 例如 November 2017 December 2017 迄今为止 我尝试导入 csv 数据 但收到了因子列 我尝试了以下代码 但没有成功 as POSIXct as character dat Date f
  • C++ 声明中的显式限定

    当第一个声明被注释掉时 以下命名空间定义无法编译 如果第一个声明foo未注释 那么它编译得很好 namespace Y void foo void Y foo 标准中的相关部分 8 3 1 说 当 declarator id 合格时 声明应