[decl.constexpr].5 到底是什么意思?

2023-12-21

该标准关于常量表达式函数[decl.constexpr] 第 5 点规定:

对于非模板、非默认 constexpr 函数或非模板、非默认、非继承 constexpr 构造函数,如果不存在参数值,则函数或构造函数的调用可以是核心常量的计算子表达式表达式(5.19),程序格式错误;无需诊断。

为此,它继续给出以下示例:

constexpr int f(bool b){ return b ? throw 0 : 0; }  // OK
constexpr int f() { return f(true); }               // ill-formed, no diagnostic required

我从中得出的结论是,具有空参数列表的函数是无法诊断的格式错误的函数。这让我印象深刻极其奇怪,以至于我怀疑我的理解是错误的。例如,这是否也是格式错误的:

constexpr int g() { return 0; }       // ill-formed?

如果是这样,其背后的基本原理是什么?如果不是,限定意味着什么/ constexpr 函数何时会变得格式错误?


大概下面这些都可以吧?

constexpr int h(int x) { return x; }  // presumably fine?
constexpr int l = h(42);              // also fine

该规则的基本原理是应该最后一个可以在其中评估函数的上下文constexpr语境。例如给定:

constexpr int f(bool b){ return b ? throw 0 : 0; }  // OK
constexpr int f() { return f(true); }               // ill-formed, no diagnostic required

没有办法调用f() in a constexpr上下文,因为all通过此函数的路径将以不是核心常量表达式.

编译器必须评估all可能的调用来查看该函数是否可以在constexpr语境。一般来说,这不容易诊断,所以语言说它是格式错误,无需诊断,即你做错了什么,但编译器无法诊断它。

请注意,如果零参数重载f如下:

constexpr int f() { return f(false); }   // ok

那很好,因为评估以核心常量表达式.

同样,这个函数:

constexpr int g() { return 0; }      // ok

还有这个:

constexpr int h(int x) { return x; }  // ok
constexpr int l = h(42);              // ok

都很好,因为g and h可以在一个中调用constexpr语境。

的措辞“...如果不存在参数值使得...”可能会令人困惑,因为您已经询问了g. But g可以用零参数调用,或者换句话说,用void争论,所以没关系。

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

[decl.constexpr].5 到底是什么意思? 的相关文章

  • 模板类包装任意类型/非类型模板类

    假设我有一个模板类base和一个班级wrapper其中包含一个实例化成员base 我想定义班级wrapper这样它依赖于模板参数包 该参数包只是 传递 给实例化成员base 例如 考虑下面的代码 它工作得很好 include
  • C#中如何检测字符串是否为货币

    通常当我需要转换时currency string 如 1200 55 z 或 1 249 到十进制值我这样做 if currencyString Contains z decimal value Decimal Parse dataToCh
  • 高级 Win32 图像文件 I/O?

    我想在 Windows C 应用程序中将图像文件读入内存 什么是一个相当简单的解决方案 也许类似于 IOS 提供的UIImage 我希望支持合理数量的文件格式 我需要为图像处理的位图提供一些低级访问权限 我在互联网上阅读了很多内容 看起来
  • Web UI 中的 .Result 出现死锁

    我正在阅读以下主题http blog stephencleary com 2012 07 dont block on async code html http blog stephencleary com 2012 07 dont bloc
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • LINQ to XML - 如何正确使用 XDocument

    现在我首先要说的是 这确实是一项任务 然而 在我遇到 Linq to XML 语法之前 我几乎已经完成了它 我有 2 个课程 曲目和 CD 现在作为作业的一部分 我创建了一张 CD 然后向其中添加了一些曲目 在搜索了大量完美解释了如何从 x
  • 实体框架代码优先 - 在另一个文件中配置

    使用 Fluent API 将表到实体的映射分开的最佳方法是什么 以便它全部位于单独的类中 而不是内联在 OnModelCreating 方法中 我目前在做什么 public class FooContext DbContext prote
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • C中有const吗?

    这个问题可能很幼稚 但是 有没有constC 中的关键字 从哪个版本开始 之间有任何语义和 或句法差异吗const在 C 和 C 中 C 和 C 之间在语法上没有差异const关键字 除了一个相当晦涩的关键字 在 C 中 自 C99 起 您
  • 根据拦截和返回值自动重试客户端WCF调用

    是否可以拦截 WCF 调用的结果并重试该操作 例如 操作的返回值可能包含状态代码 指示我传递到原始调用的会话令牌已过期 在这种情况下 我可以检索新的会话令牌并使用新的会话令牌重试调用 是否可以通过使用 WCF 拦截返回值 检查它 然后以对操
  • 如何检测斑点并将其裁剪成 png 文件?

    我一直在开发一个网络应用程序 我陷入了一个有问题的问题 我会尝试解释我想要做什么 在这里您看到第一个大图像 其中有绿色形状 我想要做的是将这些形状裁剪成不同的 png 文件 并使它们的背景透明 就像大图像下面的示例裁剪图像一样 第一张图像将
  • 推送 Lua 表

    我已经创建了一个Lua表C 但我不知道如何将该表推入堆栈顶部 以便我可以将其传递给 Lua 函数 有谁知道如何做到这一点 这是我当前的代码 lua createtable state libraries size 0 int table i
  • 抽象类和接口之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 接口与基类 https stackoverflow com questions 56867 interface vs base class 我不明白抽象类和接口之间的区别 我什么时候需要使用哪种字体
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 使用 Linq 进行异步Where过滤

    我有一个List通过填充的元素async调用 WebService 没问题 我需要过滤该列表以便在应用程序视图上显示某些内容 我试过这个 List
  • OpenMP C 程序运行速度比顺序代码慢

    我是 OpenMP 的新手 正在尝试并行化 Jarvis 的算法 然而事实证明 与顺序代码相比 并行程序花费的时间要长 2 3 倍 难道问题本身就不能并行化吗 或者我并行化它的方式有问题 这是我针对该问题的 openMP 程序 其中有 2
  • SSBO 是更大的 UBO?

    我目前正在 OpenGL 4 3 中使用 UBO 进行渲染 以将所有常量数据存储在 GPU 上 诸如材料描述 矩阵等内容 它可以工作 但是 UBO 的小尺寸 我的实现为 64kB 迫使我多次切换缓冲区 减慢渲染速度 我正在寻找类似的方法来存
  • 宏观评价[重复]

    这个问题在这里已经有答案了 可能的重复 未定义的行为和序列点 https stackoverflow com questions 4176328 undefined behavior and sequence points 我无法理解以下宏
  • 如何使复选框不可选择?

    我想知道你是怎么做的CheckBox在c 中无法选择 我认为这会是类似 SetSelectable false 之类的东西 但我似乎看不到该方法 I found CanSelect但这似乎是只读属性 您可以设置自动检查 http msdn
  • Windows 上 libcurl 的静态库[重复]

    这个问题在这里已经有答案了 如何将此库 libcurl 静态链接到 exe 我努力了 disable share enable static 没有帮助 我使用的是MingW32 有没有一种简单的方法来静态链接这个库 这样我的应用程序就不再有

随机推荐

  • 按下按钮时在滚动区域中加载 QTableWidgets

    我有一个名为 test 的方法 它将 3 个单行表加载到滚动条中 然而 由于某种原因 我无法弄清楚 如果我只是在加载时激活 test 它就可以工作 但如果我将其注释掉 然后尝试通过按下按钮来激活它 它就不起作用 这是主模块 带有 test
  • 迭代 *args?

    我正在编写一个脚本 我需要接受多个参数 然后迭代它们以执行操作 我开始定义一个函数并使用 args 到目前为止 我有如下内容 def userInput ItemA ItemB args THIS ItemA THAT ItemB MORE
  • DocumentDb - 嵌套文档和根级别的查询

    提醒我 编辑 删除 变更类型 问题 您不能对自己的帖子进行投票 0 你好 假设我有以下方式的文档 id 123 tags name something 我想查询包含 name searched 标签或 id 9000 的所有文档 我在操场上
  • ajax中的非法调用错误(Jquery 1.7.1)

    我正在尝试使用 jquery 发布 ajax 请求 var peName document getElementById peName value var peSubName document getElementById peSubNam
  • 通过 Visual Studio 进行 C++ 调试 - 向量大小变化的观察点

    我想用我的向量探索这些变化 因此我想在向量大小上设置一个点 因此 Visual Studio 将让我在每次大小更改后查看向量中的内容 我怎样才能做到这一点 在此链接中 http www codeproject com Articles 35
  • C# 如何在 windows xp/7 中禁用屏幕键盘声音

    我有一个在 Windows XP 7 上运行的 C 应用程序 我使用屏幕键盘 启用声音时会出现延迟 从而导致问题 我想禁用声音 如何通过我的 C 应用程序代码禁用声音 有任何想法吗 您可以从注册表禁用它 HKEY CURRENT USER
  • Apache hive 错误 此版本的 hadoop 不支持合并凭据

    我使用的是hadoop 1 2 1 hbase 0 94 14和hive 1 0 0 我的集群中有三个数据节点 还有三个区域服务器 我必须将一些数据从 hbase 导入到 hive 我已经成功配置配置单元 但是当我运行命令计数 no 时 h
  • 从 Xcode 5 导入 SVN 中的项目

    在 xcode 4 管理器中有一个 导入 按钮 在 xcode5 中如何导入 svn 存储库中的项目 thanks 这个问题有点令人困惑 所以如果这不完全是您所需要的 请告知 否则 请随意接受答案 令人困惑的是 您描述的 Xcode 4 工
  • 哪个版本的 Maven 与 Java 6 兼容?

    我必须在一个需要 java 6 才能运行的旧项目中工作 因为其中引用了已在未来版本中删除的已折旧的 sun 类 作为该过程的一部分 我将系统路径中的 jdk 从 8 更改为指向 java 6 jdk 这样做之后我得到 Exception i
  • EaselJS - 拖动缩放父级的子级

    注意 此问题现已解决 请参阅下面我的回答中的 修复 如果您认为合适 请随意注入任何进一步的知识 首先 我一直在研究和谷歌搜索 localToGlobal localToLocal 和 globalToLocal 但我对这些方法的理解还不足以
  • 无法将地图放入接收器上下文中

    我正在尝试查看在接收器上下文中抛出地图的方法 在这段代码中 class Sunk has titanic method sink say Sinking titanic Sunk new titanic for 1 3 1 3 map Su
  • 返回时未调用 ngOnInit

    我注意到ngOnInit 当我返回到已经实例化的页面时 方法不会被调用 我必须使用其他方法吗 我需要一个每次访问特定页面时都会调用的方法 EDIT已经测试过onPageWillEnter 但它在 Ionic 2 中没有被触发 Check 生
  • PHP中的短语分割算法

    不知道如何解释 让我们举个例子 说我想拆分句子 今天是个好日子 into today today is today is a today is a great today is a great day is is a is a great
  • 如何将图像调色板缩小为特定颜色?

    我正在使用 Python 程序来创建十字绣方案 并且需要将图像中的颜色减少为特定的牙线颜色像这样 http www dmc usa com Products Needlework Threads Embroidery Threads med
  • javascript方法链中的输入参数是如何填充的?

    我正在尝试真正了解 javascript 工作原理的细节 在方法链接期间 有时一个方法会返回到另一个具有命名输入参数的方法 例如 在 D3 中 模式如下所示 d3 select body selectAll p data dataset e
  • 使用 Backbone.js 的 JS 模板系统

    我正在寻找一些好的模板系统 可以与 Backbone js 等 MVC 框架一起使用 我知道这样一个系统 jQuery 模板 然而 由于某些原因 它已经停止 因此我正在寻找其他一些不错的选择 请建议从视图角度足够灵活的东西 例如 基于某些逻
  • Spring Boot属性在初始化时加载,并尊重所有属性并根据属性文件中的值控制@Aspect

    我们正在使用从外部文件加载属性 PropertySources 现在我想启用 禁用 Aspect基于属性 我尝试使用 ConditionalOnExpression这不起作用 我通过创建一个 bean 进行了同样的尝试propertypla
  • “您可能需要一个额外的加载器来处理这些加载器的结果。”

    我目前正在尝试为 ReactJs 构建一个状态管理库 但是一旦我将它实现到我的 React 项目中 使用create react app 它开始丢弃此错误 Failed to compile path to agile dist runti
  • QProcess 在未 waitForFinished() 时不发出信号

    下面的代码中省略了waitForFinished 使 QProcess 停止发出信号 这到底是怎么回事 这是 Qt 的错误吗 5 7 请注意 此代码与 QtConcurrent 并行运行 但这不应该改变任何事情 不是吗 Afaik 在其他线
  • [decl.constexpr].5 到底是什么意思?

    该标准关于常量表达式函数 decl constexpr 第 5 点规定 对于非模板 非默认 constexpr 函数或非模板 非默认 非继承 constexpr 构造函数 如果不存在参数值 则函数或构造函数的调用可以是核心常量的计算子表达式