为什么没有将 `std::initializer_list` 定义为文字类型?

2024-04-08

这是这个问题的后续:声明 constexprinitializer_list 对象是否合法? https://stackoverflow.com/questions/16063123/is-it-legal-to-declare-a-constexpr-initializer-list-object.

从 C++14 开始,std::initializer_list类的所有方法都标记为constexpr。通过执行以下操作来初始化实例似乎很自然constexpr std::initializer_list<int> list = {1, 2, 3};但 Clang 3.5 抱怨list没有被常量表达式初始化。正如 dyp 在评论中指出的那样 https://stackoverflow.com/questions/16063123/is-it-legal-to-declare-a-constexpr-initializer-list-object#comment43416424_16067393, 任何要求std::initializer_list作为文字类型似乎已经从规范中消失了。

如果我们甚至无法将一个类完全定义为 constexpr,那么它有什么意义呢?这是标准中的疏忽吗?将来会得到修复吗?


标准委员会似乎打算initializer_list是文字类型。然而,它看起来并不是一个明确的要求,而且似乎是标准中的一个错误。

从第 3.9.10.5 节开始:

类型是一个文字类型如果是:
- 具有以下所有属性的类类型(第 9 条):
- - 它有一个简单的析构函数,
- - 它是一种聚合类型(8.5.1)或至少有一个常量表达式构造函数或构造函数模板不是复制或移动构造函数,并且
- - 它的所有非静态数据成员和基类都是非易失性文字类型。

从第 18.9.1 节开始:

namespace std {
  template<class E> class initializer_list {
  public:
    /* code removed */
    constexpr initializer_list() noexcept;
    // No destructor given, so trivial
    /* code removed */
  };
}

这满足了第一和第二个要求。

对于第三个要求:

从§ 18.9.2(强调我的):

类型的对象initializer_list<E>提供对类型对象数组的访问const E。 [笔记:一对指针或一个指针加一个长度将是明显的表示initializer_list. initializer_list用于实现 8.5.4 中指定的初始值设定项列表。复制初始值设定项列表不会复制基础元素。
——尾注]

所以没有要求私有成员执行initializer_list是非易失性文字类型;然而,因为他们提到他们相信一对指针或一个指针和一个长度将是“明显的表示”,所以他们可能没有考虑到有人可能会在成员中放入非文字的东西initializer_list.

我想说这可能是 clang 和标准中的一个错误。

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

为什么没有将 `std::initializer_list` 定义为文字类型? 的相关文章

  • IEnumerable 的 String.Join(string, string[]) 的类似物

    class String包含非常有用的方法 String Join string string 它从数组创建一个字符串 用给定的符号分隔数组的每个元素 但一般来说 它不会在最后一个元素之后添加分隔符 我将它用于 ASP NET 编码 以用
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • C free() 是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 malloc 和 free 如何工作 https stackoverflow com questions 1119134 how malloc and free work include
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 带有运算符语法的错误消息,但不带有函数语法的错误消息

    为什么我在调用 unary 时收到错误消息 使用运算符语法 如果我用函数语法调用它就可以了 现场演示 https godbolt org z j7AbeQ template
  • 有什么方法可以重载 C# 中的扩展方法吗?

    我有以下模型模式 public abstract class PARENTCLASS public class CHILD A CLASS PARENTCLASS public static class EXTENSION public s
  • 通过 C# Mailkit / Mimekit 发送电子邮件,但出现服务器证书错误

    Visual Studio 2015 中的 0 代码 1 我正在使用 Mailkit 最新版本 1 18 1 1 从我自己的电子邮件服务器发送电子邮件 2 电子邮件服务器具有不受信任的自签名证书 3 我在代码中添加了以下两行 以忽略服务器证
  • 使用 C# 中的 Google 地图 API 和 SSIS 包获取行驶距离

    更新 找到了谷歌距离矩阵并尝试相应地修改我的代码 我在这里收到无效参数错误 return new GeoLocation dstnc uri ToString catch return new GeoLocation 0 0 https 基
  • 如何使用递归查找数字中的最小元素 [C]

    好的 所以我正在准备我的 C 考试 当谈到递归时我有点卡住了我是大学一年级的学生 这对我来说似乎有点困难 练习要求在给定的数字中使用递归函数我需要找到最小的元素 例如 52873 是 2 程序需要打印 2 include
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 时间:2019-03-17 标签:c++fstream并发访问

    如果从不同的进程 线程同时访问文件会发生什么 据我所知 没有锁定文件的标准方法 只有操作系统特定的功能 就我而言 文件将被经常读取而很少写入 现在如果A打开一个文件进行读取 ifstream 并开始读取块 和B打开相同的文件进行写入 ofs
  • ALTER TABLE ... ADD CONSTRAINT 失败时将事务回滚到保存点

    有没有办法在事务中添加检查约束and如果失败回滚到以前的保存点 而不是回滚整个事务 就我而言 当 ALTER TABLE ADD CONSTRAINT 命令失败时 事务无法回滚到保存点 尝试这样做会引发 InvalidOperationEx
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资

随机推荐

  • 错误:pandas 哈希表 keyerror

    我已经使用 pandas 成功读取了 csv 文件 当我尝试从数据框中打印特定列时 我收到关键错误 特此 我分享带有错误的代码 import pandas as pd reviews new pd read csv D aviva csv
  • 离子科尔多瓦飞溅屏幕/图标

    我正在使用适用于 iOS 和 Android 的 Ionic Framework 设计一个应用程序 我配置了启动屏幕和图标 但当我在手机上运行该应用程序时 我仍然有默认的 Cordova 启动屏幕和图标 使用ionic run androi
  • 不完整日期的策略

    正在开发一个应用程序 我们希望用户能够输入不完整的日期 在某些情况下 只有一年 例如 1854 年 或者可能有一年和一个月 例如 1983 年 3 月 或者可能有完整的日期 2001 年 6 月 11 日 我们想要一个 日期 属性 列 并且
  • 在 Windows 上使用 bcrypt 3.0.1 和 ruby​​2.0 时出现问题

    有人在 Windows 8 上安装 bcrypt 3 0 1 或 3 1 2 时遇到任何问题吗 我尝试过测试不同的版本 但出现此错误 但运行 Rails 服务器后出现此错误 无法加载此类文件 2 0 bcrypt ext 您的应用程序中没有
  • 本地#includes

    有没有某种方法可以在本地 include 标准内容 一次针对一个函数 一个类等 而不是全局的 举一个非常简单的例子 人们可能想使用 std string 但它只在一个类中需要 并且您不希望它的开销无处不在 而不是制作 include本地 您
  • componentWillReceiveProps 未触发

    在我的其他课程中 componentWillReceiveProps 工作得很好 但由于某种原因 它在这里没有触发 ItemView jsx class ItemView extends React Component constructo
  • MySQL 中多列的不同

    我希望找出 MySQL 数据库中不同行的计数 id val1 val2 val3 1 1 1 1 2 1 1 1 3 2 2 2 4 2 2 2 在上表中 查询将返回 val1 val2 val3 count 1 1 1 2 2 2 2 2
  • 如何在 case_when 语句中检测多个正则表达式

    我最近从 ifelse 转换为case when from dplyr Aim 我希望能够使用以下命令从数据帧中的语句中检测多个正则表达式case when如下 Input statement lt data frame statement
  • C++ 运算符查找规则 / Koenig 查找

    在编写测试套件时 我需要提供一个实现operator lt lt std ostream 供 Boost 单元测试使用 这有效 namespace theseus namespace core std ostream operator lt
  • 如何使用dotnetbrowser获取ajax请求响应正文?

    我已经浏览了 dotnetbrowser 网站上的文档 同时我看到了一个示例 展示了如何交叉 Ajax 调用或过滤 Ajax 调用 我想知道执行后是否可以获取 Ajax 请求正文响应 如果可能的话我该怎么做 是的 可以在 DotNetBro
  • 在 AWS lambda Node JS 的 http 响应标头中设置 Cookie

    我启用了 Lambda 代理集成 并将响应标头设置为 Lambda 输出和 API 网关的一部分 API 网关会将它们作为 HTTP 响应的一部分返回给客户端 示例代码 callback null statusCode 302 Locati
  • 如何形成独特的年、月、日的嵌套结构?

    我有一个日期数组 如下所示 2020 06 20T11 18 40 359Z 2020 06 15T11 17 45 511Z 2020 05 13T11 19 45 511Z 2019 04 20T11 49 27 828Z 我该怎么做才
  • Android Studio 3.3 xml 在 LinearLayout 上预览内部阴影

    我刚刚将 Android Studio 更新到版本 3 3 现在 在每个 XML 文件中 每个嵌套的 LinearLayout 的左侧和右侧都有一个内部阴影 如何将其去除 None
  • 如何使我的电子邮件代码适用于 PHP?

    嘿 此代码应该在未在电子邮件表单上输入输入时添加错误消息 并且应该在您最终输入代码时删除错误消息 我有两个使用以下代码 Generate a unique code function getUniqueCode length code md
  • AJAX 不更新部分视图

    我目前很难使用 Ajax 更新部分视图而无需刷新整个页面 我正在使用 MVC 和实体框架来构建视图 我将尝试尽可能多地包括在内以帮助解释自己 我有一个 div 将用于保存我所有评论的列表视图 div div 该 div 使用以下内容填充 S
  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • Spring Boot 的新遗迹

    最近 我们将一个 tomcat spring 应用程序转换为 spring boot 除了新遗物之外 一切都运行良好 有没有一种方法可以轻松地使用 Spring Boot 项目配置新的遗迹 我不想硬编码 new relic 代理 jar 路
  • 使用 VBA 确定进程 ID

    情况 我有一个宏 需要将击键按顺序发送到两个 Firefox 窗口 不幸的是 两个窗口具有相同的标题 为了处理这个问题 我激活了该窗口 发送了我的击键 然后使用 F6 加载第二个窗口的 URL 然后发送击键 然后使用 F6 将其返回到原始页
  • X86: `movsxd rdx,edx`指令是什么意思?

    我一直在玩intel mpx 发现它添加了某些我无法理解的指令 例如 英特尔格式 movsxd rdx edx I found this https stackoverflow com questions 33268906 how does
  • 为什么没有将 `std::initializer_list` 定义为文字类型?

    这是这个问题的后续 声明 constexprinitializer list 对象是否合法 https stackoverflow com questions 16063123 is it legal to declare a conste