std::vector::resize() 与 gcc 4.7.0 的奇怪行为

2024-02-24

我仍然对 的行为感到困惑std::vector::resize()。考虑以下代码(另请参阅std::vector 的类型要求 https://stackoverflow.com/questions/12251368/type-requirements-for-stdvectortype)

struct A {
  A() : X(0) { std::cerr<<" A::A(); this="<<this<<'\n'; }
  A(A const&) { assert(0); }  // is required but doesn't fire in vector::resize
  int X;
};

int main()
{
  std::vector<A> a;
  a.resize(4);        // would not compile without A::A(A const&) or A::A(A&&)
}

Without A::A(A const&) or A::A(A&&),该线与a.resize(4);不编译。但是,该构造函数从未被调用:assert(0)不火!有人可以向我解释一下吗?

我的解释是,模板魔术需要这些构造函数中的任何一个的存在allocator_traits<>(由std::vector::resize()),但实际上从未被调用过。但是,如果您不调用某个方法,为什么还需要该方法的存在呢?


该标准最新修订版(n3376 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3376.pdf) says:

12 - If size() < sz, 追加sz - size()默认插入到序列中的元素。
13 - 要求:T应该MoveInsertable and DefaultInsertable into *this.

其含义是MoveInsertable可能发生的任何重新分配都需要,而DefaultInsertable是实际附加所必需的。因此,仅当您的向量已包含元素并且需要重新分配时,您的复制或移动构造函数才会触发。

事实上,如果我们写:

std::vector<A> a;
a.resize(1);
assert(!a.empty() && a.capacity() < 4);
a.resize(4);

然后是复制或移动构造函数A被调用,并且您的断言被触发。

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

std::vector::resize() 与 gcc 4.7.0 的奇怪行为 的相关文章

  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 按成员序列化

    我已经实现了template
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 将多个表映射到实体框架中的单个实体类

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

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

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 支持作业批处理的排队系统(例如,一名工人同时处理多个作业)

    我正在寻找一个可以支持以下场景的排队系统 客户端添加一个作业 检查某个特定 url URL1 有多少 Facebook 点赞 客户端添加了另一个作业 检查 URL2 的相同信息 一名工作人员从队列中选取 1 到 50 个工作 网址 例如 如
  • VS Code Code Runner 不适用于 virtualenvs

    我无法让 Code Runner 扩展与 virtualenvs 一起使用 每当我尝试运行导入仅安装在 virtualenv 中而不是全局 Python 安装中的库的代码时 我都会收到导入错误 在终端中运行完全相同的代码是可行的 我使用的是
  • 生成 BKS 密钥库并存储应用程序密钥

    我应该创建一个 BKS 密钥库并存储一个私有应用程序密钥 该密钥是一个 48 个字符长的字符串 我还有一个 JCEKS 密钥库 其中已包含此密钥值 如果我尝试使用 portecle 工具转换为 BKS 类型密钥库 则密钥条目会丢失 我是 J
  • 为什么我的程序集需要按特定顺序加载?

    我正在编写一个简单的插件并偶然发现contractType IsAssignableFrom pluginType https msdn microsoft com en us library system type isassignabl
  • 为 nltk 解析树生成语法规则

    如果我有这句话 Mary saw a dog 以及以下内容 pos tags NNP VBD DT NN 是否可以生成这句话的语法规则 以便可以生成解析树 下面的语法是使用的语法规则nltk parse cfg sent Mary saw
  • R 中的 strptime 错误:输入字符串太长

    我似乎无法将数据从 csv 转换为正确的日期类 我使用的是包含 1033 个日期的 csv 我已将 CSV 保存为 YYYYMMDD 格式 这是我导入 csv 的代码 似乎有效 bd lt read csv birthdaysExample
  • 用其内容替换组件 - 角度 2 [重复]

    这个问题在这里已经有答案了 我正在寻找一种方法来拥有仅以其内容呈现的组件 例如 给定组件 Component selector my cmp template div my cmp div class MyComponent 使用 angu
  • Google Analytics 缺少analytics.js 脚本

    我被困在复制谷歌分析跟踪代码问题上 看起来 Google Tag Assistant 没有考虑我从为网站生成的 GA 跟踪 JS 中复制的代码 该网站位于http www orchid co nz http www orchid co nz
  • 如何让用户保持登录状态?迅速

    我正在使用 firebase 进行登录 我需要知道如何保持登录状态直到注销 我听说过 UserDefaults 但我不确定如何使用它 这是我的登录视图控制器 import FirebaseAuth import FirebaseFirest
  • strip_tags 和 html_entity_decode 组合无法按预期工作

    从昨天起我一直在与这个问题作斗争 不幸的是没有任何效果 不完全是 我找到了某种解决方法 经过一些研究和重读文档后我仍然有点目瞪口呆和困惑 假设有一个丑陋的字符串 它已经有正确的 html 编码的特殊字符 像这样 exampleString
  • 是否可以在没有 Axon Server Enterprise 的情况下扩展 Axon Framework

    是否可以在没有 Axon Server 的情况下扩展 Axon Framework企业 我有兴趣使用 Axon 创建原型 CQRS 应用程序 但最终的可部署系统必须免收许可费用 如果 Axon Framework 无法使用免费软件扩展到六个
  • Java Android 激光条码扫描器

    我正在尝试开发一个能够读取条形码 1d 而不是 qr 的应用程序 真正的问题是 常见的条形码阅读器软件非常有用 但它们似乎太慢 无法作为非常频繁和常见的功能使用 这些条形码相当长 有 20 30 位数字 对于 zxing 等应用程序来说似乎
  • 从java中的plsql函数获取返回的记录类型

    我有一个plsql返回记录类型的函数challan rec create or replace package xx bal api as type challan rec is record challan number varchar2
  • THREE.js JSONLoader 回调

    在 THREE js 中 如果我多次调用 JSONLoader 来加载多个对象 如下所示 简化示例 function init var loader new THREE JSONLoader loader load mesh1 js cre
  • React form onChange->setState 落后一步

    我在构建网络应用程序时遇到了这个问题 我在这个中复制了它jsfiddle http jsfiddle net terda12 270Lf0x9 本质上 我想要一个输入来调用this setState message input val 每次
  • Git/SVN 用于 asp.net 开发而不是 VSS?

    在工作中 我们使用ASP net 2 0和VSS VSS 是一个野兽 我们不断地遇到人们检查文件的问题 而且没有分支 让它变得疯狂 我知道 SVN GIT 主要由开源开发人员使用 那么 ASP NET 开发人员使用它有什么缺点吗 我一直在内
  • 如何使用MomentJS将自定义日期设置为react-datepicker的DatePicker?

    我已将日期存储在数据库中 我可以成功获取日期 但是当涉及到将任何特定日期设置为 DatePicker 时反应日期选择器 https www npmjs com package react datepicker 我无法设定那个日期 这是我用来
  • 模拟会话在 MVC 5 中不起作用

    我将值存储在正在测试的控制器操作的会话中 我读过几篇关于如何模拟会话的文章 我正在尝试实现 Milox 的答案在单元测试中设置 httpcontext 当前会话 https stackoverflow com questions 96242
  • 如何在 Apple Watch 上绘制自定义图形?

    如何在 Apple Watch 上绘制自定义图形 如果我理解正确的话 我们只能在 Apple Watch 上使用图像和标准控件 如果是这样 是否可以在内存中的图像上绘制自定义图形 然后将这些图像放到屏幕上 In watchOS2你可以借鉴W
  • std::vector::resize() 与 gcc 4.7.0 的奇怪行为

    我仍然对 的行为感到困惑std vector resize 考虑以下代码 另请参阅std vector 的类型要求 https stackoverflow com questions 12251368 type requirements f