类方法实现体内的“using std::swap”是什么意思?

2024-06-23

我试图学习并采用复制交换习语,遵循对这个问题的全面解释:复制交换习语 https://stackoverflow.com/q/3279543/356440.

但我发现了一些我从未见过的代码:using std::swap; // allow ADL在这个例子中

class dumb_array
{
public:
    // ...

    void swap(dumb_array& pOther) // nothrow
    {
        using std::swap; // allow ADL    /* <===== THE LINE I DONT UNDERSTAND */

        swap(mSize, pOther.mSize); // with the internal members swapped,
        swap(mArray, pOther.mArray); // *this and pOther are effectively swapped
    }
};
  1. 什么是using std::swap;意思是函数实现体内?
  2. ADL 是什么意思?

这种机制通常用在模板化代码中,即template <typename Value> class Foo.

现在的问题是使用哪个交换。std::swap<Value>会起作用,但可能并不理想。很有可能有更好的过载swap对于类型Value,但是那会在哪个命名空间中呢?几乎可以肯定它不在std::(因为这是非法的),但很可能在命名空间中Value。有可能,但还远未确定。

在这种情况下,swap(myValue, anotherValue)将为您提供“最好的”交换。参数依赖查找将在命名空间中找到任何交换Value来自。否则using指令生效,并且std::swap<Value>将被实例化并使用。

在你的代码中,mSize可能是一个整数类型,并且mArray一个指针。两者都没有关联的命名空间,并且std::swap无论如何,99.9% 的确定性对他们来说是最佳的。因此,using std::swap;声明在这里似乎毫无用处。

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

类方法实现体内的“using std::swap”是什么意思? 的相关文章

随机推荐

  • 如何将Java桌面应用程序连接到在线mysql数据库?

    正如标题所示 我想让我的桌面 java 应用程序连接到在线 mysql 数据库 我怎样才能达到这样的连接才能添加和检索数据 从以下位置下载连接器here http dev mysql com downloads connector j 将其
  • @media 媒体查询和 ASP.NET MVC razor 语法冲突

    我有一个使用 Razor 视图引擎在 ASP NET MVC 中运行的大型网站 我有一个基本样式表 其中包含整个网站的所有通用样式 然而 有时我会在页面中设置特定的样式页面的内容 通常是一行或两行 我不太喜欢把 CSS 放进去因为它不是严格
  • 谷歌分析和 iFrame

    所以我有一个简单的页面 当用户单击链接时 iframe 将打开 我正在尝试使用 pageTracker trackPageview outgoing example com 在 iframe 内部 但似乎它不起作用 我已阅读此页 code
  • 有没有办法在 AWS Lambda for Java 中发出错误信号而不引发异常?

    如果我的 Lambda 抛出Exception与消息404那么 API Gateway 中看到的响应是 errorMessage 404 errorType java lang Exception stackTrace 我可以匹配 erro
  • var self = 这个?

    使用实例方法作为事件处理程序的回调会改变this from 我的实例 to 无论刚刚调用了什么回调 所以我的代码看起来像这样 function MyObject this doSomething function var self this
  • 无法在邮件标头中添加回复 C#

    我正在开发 Windows 窗体应用程序 Dot net Framework 4 用于发送 SMTP 电子邮件 我正在使用以下代码发送电子邮件 MailMessage mail new MailMessage Company Name lt
  • ojdbc6.jar 文件是什么?

    对于学校项目 我必须使用数据库编写 Java 程序 为此我必须导入该项目文件 ojdbc6 jar 我知道没有它我就无法使用数据库 但我真的不知道这个文件是什么 有人可以解释一下吗 这样的文件是如何被调用的 它的用途到底是什么 简单地说 J
  • 检查文件是否包含多字节字符

    我有一些 UTF 8 格式的字幕文件 有时 这些文件中存在一些零星的多字节字符 这会导致某些应用程序出现问题 如果某个文件包含任何多字节字符 我如何在 Linux 中检查 并可能找到这些文件 可以使用文件命令 chalet16 echo t
  • JavaEE解决方案配置最佳实践

    我们构建 3 层企业解决方案 通常由多个 webapp 和 ejbjar 模块组成 这些模块都与 数据库通信并具有多个外部集成点 每个模块通常需要自己的配置 这些配置可以在解决方案的生命周期内发生变化 部署它变成了一场噩梦 因为现在我们有
  • jQuery Datetimepicker - 单击时更改 minDateTime 和 maxDateTime?

    我正在使用 jQuery UI 日期选择器的优秀 Trent Richardson 日期时间选择器插件 我有几行数据 每行有两个选择器实例 一个用于流程的开始时间 一个用于流程的结束时间 当我的用户单击一个时 我想根据另一个框的值重置最小或
  • Android:来自膨胀布局的自定义视图

    我正在根据以下内容创建自己的布局RelativeLayout作为代码中的类 我有 XML 中定义的布局基础知识R layout menu layout 样式 背景可绘制 边距 高度 如果我不需要课程 那么我会调用 inflater 来执行此
  • 序列化 javascript 类对象?

    要求很简单 这里有一堂课 class myobj constructor var1 var2 this var1 var1 this var2 var2 addThemUp return this var1 this var2 现在我做其中
  • 检查 URL 方案是否已在 Cordova 的 iOS 或 Android 上注册

    我想检查是否安装了特定的应用程序 如果安装了 则调用它 AFAIK 方法是检查应用程序的自定义 url 方案是否已注册 并使用该 url 启动应用程序 有没有办法在我的 Cordova 应用程序中执行此操作 具体来说 我想检查 iOS 上是
  • 如何在 Visual Studio Code 中创建工作区?

    我有一个非常初学者的问题 我碰巧在 Mac 上安装了 Visual Studio Code 每次我尝试在其上运行一个简单的 Python 程序时 它都会说我需要一个工作区来运行 那么我该如何创建工作区呢 我不知道你如何尝试运行这个程序 但你
  • 方法执行时按钮禁用(PreviewLeftMouseDown/Up 必须可行)

    我需要一个如下的序列 按钮默认状态 按钮按下 按钮按下的方法 执行 并且按钮本身被禁用一段时间 由于 禁用 时间已过 按钮已启用 按钮向上 执行 按钮向上的方法 按钮默认状态 我已经尝试过这段代码 它的第一部分工作正常 但第二部分 Up 不
  • 如何在设备屏幕右侧设置抽屉布局图标?

    我已经创建了抽屉布局示例应用程序 它工作正常 我的问题是抽屉布局从右到左完美工作 但我试图将图标从左侧移动到右侧 但它不起作用 请给我您的建议 这可能吗
  • 应用过滤后从 ALAsset 获取缩略图的快速方法

    一种从图像生成缩略图的快速便捷的方法ALAsset在问题的答案中描述 从 ALAssetRepresentation 生成自定义缩略图 https stackoverflow com questions 11765340 generatin
  • 复制构造函数有什么问题?为什么要使用Cloneable接口?

    在进行 C 编程时 我们过去常常在需要时创建复制构造函数 或者我们是这么被教导的 几年前切换到 Java 时 我注意到现在正在使用 Cloneable 接口 C 遵循定义 ICloneable 接口的相同路线 在我看来 克隆是 OOP 定义
  • 如何将 Facebook 页面帖子作为博客帖子拉入 WordPress?

    After 很多挣扎 https stackoverflow com questions 9709016 how to obtain a facebook page rss with the new timeline随着 Facebook
  • 类方法实现体内的“using std::swap”是什么意思?

    我试图学习并采用复制交换习语 遵循对这个问题的全面解释 复制交换习语 https stackoverflow com q 3279543 356440 但我发现了一些我从未见过的代码 using std swap allow ADL在这个例