默认插入向量不是默认初始化吗?

2024-01-05

中的一个std::vector构造函数规定为,强调我的:

explicit vector(size_type n, const Allocator& = Allocator());
Effects:构造一个vector with n 默认插入使用指定分配器的元素。
要求: T应该DefaultInsertable into *this.
复杂:线性输入n.

默认插入与默认初始化有什么关系吗?在此代码上:

std::vector<char> v(66000);

gcc 5.2 优化产生:

  400d18:   bf d0 01 01 00          mov    $0x101d0,%edi
  400d1d:   48 83 c5 01             add    $0x1,%rbp
  400d21:   e8 1a fd ff ff          callq  400a40 <operator new(unsigned long)@plt>
  400d26:   31 f6                   xor    %esi,%esi
  400d28:   48 89 c3                mov    %rax,%rbx
  400d2b:   ba d0 01 01 00          mov    $0x101d0,%edx
  400d30:   48 89 c7                mov    %rax,%rdi
  400d33:   e8 38 fc ff ff          callq  400970 <memset@plt>

memset?什么是you在这里做什么?我认为这应该简单地相当于new char[66000]...也就是说,没有初始化。 clang 3.7 还发出memset.

为什么有一个memset这里?就标准而言,这是否正确?毕竟,如果我想要 66000 个值初始化的字符,我已经有了这个构造函数:

std::vector<char> v(66000, '\0');

这是正确的行为。见 23.2.1:

如果 X 的元素是通过表达式求值来初始化的,则默认插入该元素allocator_traits<A>::construct(m, p)

Than, allocator_traits<A>::construct将会通知a.construct(p, std::forward<Args>(args)...)。反过来,这又调用::new((void *)p) U(std::forward<Args>(args)...),这实际上调用new(),它进行值初始化。

结论:

memset()是合适的。

结论#2

缺少自定义分配器,std::vector不允许人们选择访问未初始化的存储。每个合法存在于向量中的对象都被值初始化。

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

默认插入向量不是默认初始化吗? 的相关文章

  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 如何查询数据库字段但忽略 HTML 标记?

    我们有一个包含用于在网站上格式化的 HTML 标记的字段 但我们只需要查询应在屏幕上呈现的文本 而不是 CSS 标签 标签名称 属性名称等内容 有没有办法忽略 SQL 查询或存储过程中的标记 如果有办法做到这一点 我们以后会遇到性能问题吗
  • 如何更改UIWebView中的字符编码?

    问题总结 在 iOS 上浏览非英文网站时 如果没有使用 UIWebView 明确指定正确的字符编码 则页面无法正确显示 详细解释 As the loadRequest UIWebView 中的方法将使用从 Web 服务器发送的字符集标头中指
  • 将查询参数传递给 Flask 装饰器

    我正在为我的 Flask 服务器设置一个令牌身份验证系统 并且我希望能够设置一个装饰器 如下所示 app route my data requires token auth def get my endpoint data Return J
  • jquery滑动侧边栏从左到右

    我正在尝试创建一个滑动侧栏 其效果类似于 www wookmark com http www dynamicdrive com dynamicindex1 slideinmenu htm http www dynamicdrive com
  • 使用 ETW 跟踪 Windows 用户模式进程系统调用

    有些人告诉我 ETW 提供了一种捕获用户模式进程发出的系统调用的机制 我已经列举了可用的提供者 并且只提出了两个可能提供此信息的可能的提供者 第一个是 Microsoft Windows Kernel Audit API Calls 该提供
  • 如何使用 pycharm 调试 docker-compose 内运行的进程

    我正在尝试将本地 Pycharm Django 切换到基于 docker 的开发环境 我在 mac 上运行并使用 Docker Compose 很少的 docker 我的 django 应用程序 一些 db 和 nginx 一切运行良好 代
  • scikit-learn 中 SVC 和 SVM 有什么区别?

    来自文档 http scikit learn org stable modules svm htmlscikit learn 实现了 SVC NuSVC 和 LinearSVC 这些类能够在数据集上执行多类分类 另一方面 我还了解到 sci
  • 是否总是可以使用 HTML5

    我一直注意到您可以使用 HTML5 标签播放音频文件 考虑到您只需要使用 1 个元素来播放视频和音频 这看起来真的很方便 一个例子是这个 JSFiddle http jsfiddle net oacLrnvv
  • 如何在 Windows/Linux 上设置 Java Swing 应用程序的 DPI?

    如果您的显示器的 DPI 超过 150 例如 Macbook Pro 您也可能会发现问题 Java Swing 应用程序上的字体对于高 DPI 显示器来说太小 而且我根本无法更改字体大小 它直接忽略Windows DPI 只显示最初的 DP
  • 如何在 Android 中向操作栏显示溢出菜单项

    我正在编写一个Android应用程序 我试图在其中将溢出菜单项显示到 ActionBar 使用这个很棒的教程链接 http wptrafficanalyzer in blog adding action items and overflow
  • 未找到 Codeception Yii

    我尝试使用 codecept 在 Yii2 项目中运行单元测试 并收到下一个错误 PHP Fatal error Class Yii not found in var www html mysite vendor codeception c
  • 运行应用程序时出现 iOS Phonegap Infinite Dialog 错误?

    我在为 iOS 开发 PhoneGap 应用程序时遇到问题 我刚刚将所有 html css javascript 标记复制到phonegap 应用程序中 我在 10 6 8 的 Mac 上使用 xcode3 当我运行该应用程序时 加载并安装
  • 将 nvarchar 值转换为数据类型 int 时转换失败

    我的代码隐藏中出现转换失败的错误 我的代码如下 using SqlCommand cmd new SqlCommand tempUsertype 0 Select from tbl students Select from tbl stud
  • 闪屏安卓

    我正在尝试创建一种效果 看起来就像您在拍摄设备屏幕截图时看到的闪光一样 我的问题是 有什么办法可以做到这一点吗 如果可以的话我可以改变那个小闪光灯的颜色吗 您将需要使用 FrameLayout 或relativelayout 作为根视图 然
  • 从 ResultSet 获取 Integer 对象 [重复]

    这个问题在这里已经有答案了 A ResultSet提供方法getInt 返回原始值int 是否可以获得Integer对象 它允许null 我正在检索的数据库字段可以为空并且getInt 返回我0每当该字段null Thanks 只需检查该字
  • [azure 服务总线 - 如何在 Azure 服务总线中使用 JMS 设置消息 ID

    使用 Spring JMS 向 Azure 服务总线发送消息时 消息 ID 被覆盖 因此 重复检测无法按预期工作 我读过 JMS 文档 其中说 JMSMessageId 不能由生产者设置 它由 JMS 保留供内部使用 现在的问题是如何设置
  • SQL表-根据条件组合行[重复]

    这个问题在这里已经有答案了 我有一张像这样的桌子 DateCol TaskID EventName 2017 09 25 10 A 2017 07 26 10 B 2017 07 27 10 A 2017 09 14 10 A 2017 0
  • 如何在 ASP.NET WebAPI 中返回文件 (FileContentResult)

    在常规 MVC 控制器中 我们可以使用以下命令输出 pdfFileContentResult public FileContentResult Test TestViewModel vm var stream new MemoryStrea
  • Node.js、protobuf、buffer.length..如何通过 tcp 发送结构化缓冲区/消息?

    我写了一个 node ssjs 程序 它可以 使用 TLS 模块与数据服务器 Apache MIMA 进行 TCP 连接 好的 通过 protobuffer 模块对消息进行编码 解码 序列化 反序列化 OK 将序列化消息发送到服务器并获取响
  • 默认插入向量不是默认初始化吗?

    中的一个std vector构造函数规定为 强调我的 explicit vector size type n const Allocator Allocator Effects 构造一个vector with n 默认插入使用指定分配器的元