异常的 C++[Bug]?

2023-11-27

我一直在阅读Exceptional C++ by Herb Sutter。到达时Item 32

我发现了以下内容

 namespace A 
 {
     struct X;
     struct Y;
     void f( int );
     void g( X );
 }
 namespace B
 {
     void f( int i )
     {
        f( i );   // which f()?
     }
 }

这个 f() 调用自身,无限递归。原因是唯一可见的 f() 是 B::f() 本身。

还有另一个带有签名 f(int) 的函数,即命名空间 A 中的函数。如果 B 写了“使用命名空间 A;”或“using A::f;”,那么在查找 f(int) 时 A::f(int) 将作为候选者可见,并且 f(i) 调用在 A::f( int) 和 B::f(int)。然而,由于 B 没有将 A::f(int) 纳入作用域,因此只能考虑 B::f(int),因此调用明确解析为 B::f(int)。

但是当我执行以下操作时..

 namespace A 
 {
     struct X;
     struct Y;
     void f( int );
     void g( X );
 }
 namespace B
 {
     using namespace A;
     void f( int i )
     {
        f( i );   // No error, why?
     }
 }

这意味着赫伯·萨特完全搞错了?如果不是,为什么我没有收到错误消息?


using 声明之间存在细微的差别(using A::f) 和一个 using 指令 ​​(using namespace A).

using 声明将名称引入到使用它的范围中,以便using A::f拨打电话至f在定义中B::f(int)模糊的。

using 定义使命名空间的成员在使用它的范围内可见,但它们appear就好像该名称来自引入的命名空间和使用 using 指令的命名空间的最近公共范围。这意味着using namespace A;在这种情况下,使另一个f看起来好像它是在全局范围内声明的,但它仍然被隐藏B::f(int).

(ISO/IEC/BS 14882:2003 7.3.4 [namespace.udir] / 1 适用于所有标准爱好者。)

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

异常的 C++[Bug]? 的相关文章

随机推荐

  • 将 0 移至数组末尾

    我需要将数组中的所有 0 移动到数组的末尾 示例 1 10 0 5 7 应该得到 1 10 5 7 0 我愿意做反向循环或常规循环 I cannot创建一个新数组 这是我到目前为止所拥有的 for int i arr length i lt
  • 从 csv 文件读取并根据第一列值提取某些数据列

    这是我的第一个批处理程序 我一直在网上搜索 但仍在努力编写解决方案 我有以下 CSV 文件 RH 2013 06 15 02 14 58 0400 X LQ3SUEEWPWKL6 005 FH 01 SH 2013 06 14 00 00
  • unix shell 中的数组?

    如何在 unix shell 脚本中创建数组 以下代码在 shell 中创建并打印字符串数组 bin bash array A B ElementC ElementE for element in array do echo element
  • 在 iPhone 上按下控制器时翻转动画

    我环顾四周 没有找到我真正想要的东西 有没有办法在推动视图控制器时获得翻转动画 我读到您可以通过使用模态视图控制器来更改动画 但据我所知模态视图的动画是从下到上的 这不是我想要的 有没有办法以某种方式获得翻转动画 像这样的东西应该有效 UI
  • 从控制台读取字符

    我编写控制台应用程序 它对 int 执行多次 scanf 之后 我执行 getchar int x y char c printf x n scanf d x printf y n scanf d y c getchar 结果我得到c n
  • 带 lapply 和 sapply 的日期

    我导入了一个包含大量日期的 CSV 文件 并使用 as Date 函数来转换日期 但是 当我使用 mapply 函数查找两个日期中较早的一个时 我最终要么得到一个包含日期的列表 要么得到一个数字向量 如何获得带有日期的向量 POP Star
  • 如何在没有原始 Markdown 输出的情况下使用 knitr 块将元素添加到绘图中?

    出于记录目的 我想要一些 html 输出中的情节代码 但不是情节 后来 我必须调用绘图代码 并向绘图添加一些内容 但只能看到附加代码 我试过这个 r non finished plotting eval FALSE plot 1 type
  • 我可以从 android webview 打开 Whatsapp 应用程序吗

    我制作了一个网站的网络视图 现在我想将我的网络视图中的一些数据共享到 Whatsapp 应用程序 我能够打开 Whatsapp 网页 但我的客户希望我打开 Whatsapp 应用程序而不是 Whatsapp 网页 我怎样才能做到这一点 这就
  • 最大自定义窗口失去投影效果

    我有一个自定义 WPF 窗口定义为
  • 错误 BC30456:“[方法]”不是“ASP.[CodeBehind]_aspx”的成员

    很简单的问题 我非常确定我已经正确链接了类 方法 代码隐藏等 网上很多帖子都说这与编译和 或 dll bin 文件有关 但他们的帮助都对我不起作用 Compiler Error Message BC30456 gvLegs PageInde
  • 如何在 Windows 上使用 Python 捕获 SIGINT?

    如同这个问题 在 Python 2 7 下的 UNIX 上 在 Python 提示符下 gt gt gt import signal gt gt gt def handler signal frame print welcome to th
  • 如何使用ID删除NDB实体?

    基于此文档https developers google com appengine docs python ndb entities deleting entities好吧 我仍然不确定为什么我不能在 NDB 上进行删除 def get
  • 与 JComponent 相比,在 JPanel 上绘画有什么好处?

    所以在最近的一个回答中 有人评论了这一点 关于绘画 这可能是 90 Swing 程序员的某种毛病 当他们制作自己的组件时 他们总是扩展 JPanel 而不是 JComponent 为什么呢 我对编程还很陌生 所以我认为现在称自己为 Swin
  • 从另一个apk获取资源

    我整天都在为这个问题苦苦挣扎 但没有成功 我基本上是想从另一个应用程序获取图像资源 因此 如果 com example app 在 res 文件夹中有一个名为 image1 png 的图像 我希望 com example2 app 能够访问
  • AutoMapper 将目标对象的属性设置为 null

    我有这样的事情 public class DomainEntity public string Name get set public string Street get set public IEnumerable
  • 将私钥添加到 X509Certificate

    我正在编写一些当前使用 OpenSSL net 为证书签名请求创建公钥 私钥对的代码 该请求配备有公钥并发送到 CA CA 返回签名证书 然后将之前创建的私钥添加到证书中 myCert PrivateKey CryptoKey FromPr
  • 如何从 AWS SAM 获取堆栈输出?

    我想对我的无服务器项目执行自动集成测试 为此 我需要以某种方式获取 api 端点 已经有插件 serverless stack output用于服务于该目的的无服务器框架 但我想知道在部署应用程序后如何通过 AWS SAM 实现类似的目标
  • 客户端向服务器发送延迟的 FIN ACK(约 500 毫秒)

    我有一个 node js 客户端 10 177 62 7 请求来自服务器 10 177 0 1 的 http Rest 服务的一些数据 客户端只需使用node js http request 方法 agent false 客户端位于 Ubu
  • 如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中

    我加载网格视图 网格视图有一个编辑和删除按钮 我点击 编辑 然后我得到 ddlAssignedTo has a SelectedValue which is invalid because it does not exist in the
  • 异常的 C++[Bug]?

    我一直在阅读Exceptional C by Herb Sutter 到达时Item 32 我发现了以下内容 namespace A struct X struct Y void f int void g X namespace B voi