构造函数:默认参数和委托参数之间的区别

2023-12-20

今天,我偶然发现这些标准声明 http://en.cppreference.com/w/cpp/container/vector/vector of std::vector构造函数:

// until C++14
explicit vector( const Allocator& alloc = Allocator() );
// since C++14
vector() : vector( Allocator() ) {}
explicit vector( const Allocator& alloc );

这种变化可以在大多数标准容器中看到。一个稍微不同的例子是std::set :

// until C++14
explicit set( const Compare& comp = Compare(),
              const Allocator& alloc = Allocator() );
// since C++14
set() : set( Compare() ) {}
explicit set( const Compare& comp,
              const Allocator& alloc = Allocator() );

这两种模式有什么区别,它们有什么(缺点?
它们是否严格等效 - 编译器是否生成与第一个类似的第二个?


不同之处在于

explicit vector( const Allocator& alloc = Allocator() );

is explicit即使对于使用默认参数的情况,同时

vector() : vector( Allocator() ) {}

不是。 (这explicit在第一种情况下有必要防止Allocators 从隐式转换为 avector.)

这意味着你可以写

std::vector<int> f() { return {}; }

or

std::vector<int> vec = {};

属于第二种情况,但不是第一种情况。

See LWG 问题 2193 http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2193.

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

构造函数:默认参数和委托参数之间的区别 的相关文章

  • Python 的 pack("

    我不太了解 python 但从文档中可以看出代码 str AAAA str pack
  • 运行应用程序时.NET 3.5 JIT 不工作

    以下代码在 Visual Studio 内部运行该版本和在 Visual Studio 外部运行该版本时提供不同的输出 我正在使用 Visual Studio 2008 并面向 NET 3 5 我也尝试过 NET 3 5 SP1 在 Vis
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 当 foreach 块的内容具有 Conditional 属性时,C# 编译器是否会对其进行优化?

    我正在工作中编写一些调试代码 我想知道我所做的是否会损害性能 让我们看一下代码 foreach var item in aCollection Debug WriteLine item Name 我知道 Debug 类使用 Conditio
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • C# 反序列化过程中创建指向父对象的指针

    我有这样的课程 Serializable public class child public Parent parent Serializable public class Parent public List
  • 何时分离或加入 boost 线程?

    我有一个方法 大约每 30 秒触发一次 我需要在一个线程中包含它 我有一个可以从类外调用的方法 像 call Threaded Method 这样的东西会创建一个线程 该线程本身会调用最终的线程方法 这些是 MyClass 的方法 void
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 将 .plist 文件与 iCloud 同步

    我正在尝试弄清楚如何同步 Mac 沙盒应用程序中 应用程序支持 文件夹中的 plist 文件 我知道我可以使用 iCloud 键值存储 但每个应用程序有 64KB 的限制 这可能会或可能不会达到 具体取决于用户向应用程序添加了多少内容 我已
  • Lucene排名-如何使用新的4.0评分模型

    我正拼命地尝试在 Lucene 中实现一项新功能 所以我向您求助 基本上 在此 JIRA ISSE 中 一些额外的评分模型已添加到 Lucene 中 https issues apache org jira browse LUCENE 29
  • MongoDB 聚合不同文档中数组中的项目数?

    这是我的 MongoDB 集合架构 company String model String tags String 我需要聚合它 以便得到以下输出 id company Lenovo model T400 tags tag SomeTag
  • 注入的依赖项应该是公开访问的还是私有的?

    是否应该将依赖项存储到具有私有 setter 和公共 getter 的私有字段或属性 这适用于构造函数 DI 需要明确的是 在属性示例中 我不希望将它们添加到随附的接口中 除非有意义 即它们仅在实现类型中可见 interface IFoo
  • 通配符扩展的 Java 通用类型仅允许添加 null

    我正在使用下面的代码并尝试添加 CHild 对象是列表 List
  • 编辑新创建用户的注册表值

    我有一个 NET 应用程序 它创建一个新的本地用户 如下所示 var principalContext new PrincipalContext ContextType Machine var userPrincipal new UserP
  • 如何使用 svnX 将 *.a 文件添加到存储库中?

    似乎 svnX 默默地忽略所有 a 文件 但是我想将一些库添加到存储库中 如何使用 svnX 来做到这一点 我发现我必须编辑我的 subversion config 文件 取消注释 global ignores 行并删除 a 文件类型 之后
  • 如何在 Python 中前向声明/原型化函数? [复制]

    这个问题在这里已经有答案了 如何在类似于 C 的通用 Python 程序中构建方法原型 Prototype Do Python prototyping writeHello Gives an error as it was not defi
  • Spark 执行有时会卡在 Exchange.scala:44 的 mapPartitions 处

    我正在运行一个Spark两节点独立集群上的作业 v 1 0 1 Spark执行经常卡在任务mapPartitions处Exchange scala 44 这发生在我工作的最后阶段 打电话给saveAsTextFile 正如我对 Spark
  • Java 注释中的 /** 和 /*

    有什么区别 comment and comment 在Java中 我什么时候应该使用它们 第一种形式称为Javadoc http en wikipedia org wiki Javadoc 当您为代码编写正式的 API 时 可以使用它 这些
  • F# 中的列表理解与高阶函数

    我有SML背景 对高阶函数感觉很舒服 但我真的不明白列表理解的想法 是否存在列表理解比高阶函数更适合的情况List反之亦然 我听说列表理解比高阶函数慢 在编写性能关键函数时我应该避免使用它吗 为了举例 请看一下在 F 中高效投影列表列表 h
  • SQL Server通过脚本管理列描述

    有没有办法通过脚本更改 更新和删除 删除列描述 I use sp addextendedproperty添加描述 但不允许更新 当我尝试使用相同的 sp 更新现有描述值时 它会显示类似 描述属性已存在 之类的内容 改变或删除 创建类似的解决
  • RecyclerView.Adapter 内的 onActivityResult 未使用

    我在适配器内有一个按钮 可以进入画廊 MyAdapter extends RecyclerView Adapter
  • 自定义数据类型在设备之间不同步

    我正在尝试使用 Google Fit API 来存储自定义数据类型 我可以在单个设备上很好地插入和检索它们 但是当我在不同设备上登录同一个 Google 帐户时 数据不存在 我可以从每个设备创建和检索数据 但它们都保留自己的数据 并且不通过
  • 更改 matplotlib pyplot 图例中线条的线宽[重复]

    这个问题在这里已经有答案了 我想更改 pyplot 图例中的线条样本的厚度 宽度 图例中的线样本的线宽与它们在图中表示的线相同 因此 如果线y1 has linewidth 7 0 图例对应的y1标签上也会有linewidth 7 0 我希
  • 启动没有控制台窗口的程序(在后台)

    我想在 Windows 启动时启动一个简单的程序 但我不想显示与该程序关联的控制台输出窗口 只是为了测试 该程序可以简单如下 int main int argc char argv while 1 printf hello world n
  • 为什么 PHP 中 65.6*100%10 等于 9 而不是 0?

    echo 65 7 100 10 0 echo 65 6 100 10 9 lt echo 6560 10 0 echo 65 5 100 10 0 有人可以解释一下为什么吗 EDIT 对于人类或非程序员来说 结果 9 显然是错误的 我怎样
  • 在 Outlook html 电子邮件中,浮动不起作用

    我想要这样的布局 其中有一个矩形框 左边的盒子里有一个文本 右边有一个图像 这在浏览器中看起来很好 但是当作为 html 电子邮件发送时 在 Outlook 中浮动权限似乎不起作用 它将图像放在文本下方的下一行 关于如何实现这项工作有什么想
  • html 表格如何通过更改悬停时的边框来突出显示列?

    我正在探索如何设计表格样式 以便当鼠标悬停在列上时可以更改边框 当鼠标悬停在一列上时 我想通过更改边框颜色来突出显示该列 需要强调的是 我将以下 JavaScript 代码与 jQuery 库结合使用 td hover function v
  • 构造函数:默认参数和委托参数之间的区别

    今天 我偶然发现这些标准声明 http en cppreference com w cpp container vector vector of std vector构造函数 until C 14 explicit vector const