是否允许为 std::array 定义专门化?它会导致未定义的行为吗?

2024-01-18

我正在一个有课程的图书馆工作foo. foo有一个不平凡的构造函数。当我创建一个std::array of foo (std::array<foo, 10>),构造函数被调用 10 次。我想实现一种单独的方式来初始化数组foo。将定义一个专业std::array<foo, N>导致未定义的行为或任何其他问题?如果可以的话,我的专业需要具备哪些属性?

https://en.cppreference.com/w/cpp/language/extending_std https://en.cppreference.com/w/cpp/language/extending_std表示允许自定义类型的专业化,除非明确禁止并且https://en.cppreference.com/w/cpp/container/array https://en.cppreference.com/w/cpp/container/array没有提及任何相关内容。


是的,你可以专攻std::array<foo, N>对于程序定义的foo。然而,这有很多问题,这里只给出两个主要的问题:

  1. 每个用户的std::array<foo, N>必须在第一次使用实例化之前包含部分专业化std::array<foo, N>。否则行为是未定义的。因此,如果一个翻译单位或图书馆使用std::array<foo, N>如果不包括专业化,你就会遇到问题。即使从更实际的角度(而不是标准的 UB)来看,在这种情况下,库/翻译单元之间也可能存在 ABI 中断。换句话说,放置专业化的唯一安全位置是在提供的标头中foo, 这将inside图书馆。

  2. 您的专业化必须满足该标准对标准库实现的要求std::array。这些要求之一是std::array是一个聚合类型。这意味着您无法为该类提供自定义构造函数,从而使您的目标变得不可能。

相反,定义您自己的容器类型,使其按照您想要的方式运行,尽管我质疑您到底在想什么。您想要的可能很复杂std::vector并且你会因此得到更好的服务。有时一个std::vector分配最大大小的完全堆栈也很好,但标准库没有。但是,可以使用自定义堆栈分配器来模拟它std::vector.

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

是否允许为 std::array 定义专门化?它会导致未定义的行为吗? 的相关文章

随机推荐

  • 如何获取 Hibernate 中返回的多种对象类型

    我正在使用 Hibernate JSF Spring3 在查询中 我需要获取作为结果返回的许多对象类型 public ArrayList
  • 无法在 Red hat linux 上安装 rgdal 和 rgeos R 库

    我编译时出错rgdal adn rgoes我们的 redhat linux 机器上的包 我尝试做一些研究 但找不到可能的解决方案 您能帮我解决这个问题吗 因为这对我来说非常重要 ERROR WHILE COMPILING RGDAL in
  • 仅变量应通过函数引用进行赋值

    我使用旧版本的 Codeigniter 框架 使用新版本的 php 我收到此错误 Only variables should be assigned by reference 我想知道这是否是安全的错误修复 改变 this gt base
  • ios 应用内订阅 - Original_transaction_id 何时更改?

    当存在自动续订订阅时 请考虑以下模型情况 用户购买 1 个月的订阅 假设在一月份 取消续订 然后等到三月 gt 1 个月 并再次购买相同的订阅 AppStore 是否返回 在收据验证时 新的original transaction id对于
  • iPhone 中的 Sqlite3 数据库被锁定 - 如何避免?

    我有一个在 Sqlite3 DB 上执行搜索的查询 它除了使用阅读器进行阅读之外什么也不做 对于每个找到的匹配项 它都会调用 UI 回调来更新结果视图 当此搜索运行时 我点击了 UI 中的一个按钮 该按钮将在新线程中执行一些其他操作 最后它
  • 溢出 y 隐藏 溢出 x 可见

    我有一个 div 蓝色框 它绝对定位在父元素 红色框 内的页面上 并且我需要将 Overflow y 设置为隐藏 以便强制截断 Y 轴上的溢出内容 但我希望任何溢出 x 的内容都可见 HTML div div div style width
  • 使用 hibernate 标准选择值对象

    我试图找出是否可以使用 Hibernate Criteria API 执行以下 HQL String hql select new InitialCount substring name 1 1 count id from Person g
  • 使用自定义身份验证提供程序/服务的 ASP.Net Identity

    我目前正在开发一个 ASP Net MVC Web 应用程序 需要用户名和密码身份验证 我开始考虑使用 ASP Net Identity 来实现此目的 但是我有一个非常重要的要求 要求是 Web 应用程序本身不能直接访问任何数据库 所有 D
  • Google 地图:如何移动缩放控件?

    如何通过 API 将 Google 地图缩放控件移动到地图的另一侧 var myOptions zoom 6 zoomControl true zoomControlOptions style google maps ZoomControl
  • Bootstrap 3:100%高度后如何粘贴

    我试图让我的导航栏在设置为 100 高度的介绍后固定到顶部 但我不确定执行此操作的最佳方法是什么 Code CSS html body height 100 min height 100 intro height 100 text alig
  • 如何监控第三方存储库的 GitHub 提交

    初学者在这里 我已为由其他人创建和管理的 GitHub 存储库加注星标 有没有办法监视提交并在每次有人签入主分支时向侦听器发送电子邮件 请注意 我不拥有该存储库 我只是想跟踪我喜欢的存储库上的更改 您可以获得原子饲料 https en wi
  • 如何解决此类问题?

    br br br div style line height 50 span style display block span div
  • Swift:如何查看 Xcode 监视窗口中显示的变量值?

    简单的问题 使用 Swift 时如何查看 Xcode 监视窗口中变量的值 这是一个示例 看看 mdn 如何具有值 2067134273 但无法在监视窗口中查看该值 ObjectiveC NSObject 不会扩展为任何内容 我认为这可能是由
  • Matplotlib 在绘图区域内移动刻度标签

    是否可以在绘图区域内放置刻度标签 我已经尝试过 ax tick params axis y pad 5 left off labelleft on and ax tick params axis y direction in left of
  • 为什么在 ASP.NET MVC 中使用数据库工厂?

    最近我使用了 asp net mvc 我在示例项目中看到正在使用数据库工厂类 您如何向我解释为什么使用它 IDatabaseFactory类 public interface IDatabaseFactory IDisposable EFM
  • Sharepoint 2007:为自定义字段类型创建多行文本自定义属性?

    我正在尝试扩展内置的 Choice 字段类型以包含另一条数据 正确答案 这样 用户将能够直接在 Sharepoint 中创建自己的测试 而不必使用 InfoPath 或其他一些复杂的解决方案 我希望继承现有的 SPFieldChoice 类
  • 如何将手动创建的 WebJobs 发布到 Azure

    我按照本文创建了一个针对 NET Core 的 WebJobs 应用程序 http matt roberts me azure webjobs in net core 2 with di and configuration http mat
  • 部分申请和关闭

    有人问我偏函数应用和闭包之间有什么关系 我会说没有 除非我没有抓住重点 假设我正在用 python 编写 并且有一个非常简单的函数 MySum 定义如下 MySum lambda x y x y 现在 我正在修复一个参数以获得一个具有较小数
  • Xperia XA1 ultra 不显示 Logcat 消息

    您好 当我在 android studio 中使用 Sony Xperia XA1 Ultra 调试我的应用程序时 不会出现调试和详细日志 我的手机运行的是Android 8 0 我已经安装了必要的驱动程序并使用另一部手机 Sony Xpe
  • 是否允许为 std::array 定义专门化?它会导致未定义的行为吗?

    我正在一个有课程的图书馆工作foo foo有一个不平凡的构造函数 当我创建一个std array of foo std array