constexpr 与 const 对比 constexpr const

2023-12-13

变量上的 const 与 constexpr

这家伙关于 constexpr 的说法是正确的if double被使用(或float当然)。但是,如果您将 var 类型更改为double对于像 int、char 等整数类型,一切正常。为什么会发生这种情况?

http://ideone.com/DAWABE

int main() 
{
    const int PI1 = 3;
    constexpr int PI2 = 3;
    constexpr int PI3 = PI1;  // works
    static_assert(PI1 == 3, "");  // works

    const double PI1__ = 3.0;
    constexpr double PI2__ = 3.0;
    constexpr double PI3__ = PI1__;  // error
    static_assert(PI1__ == 3.0, "");  // error
    return 0;
}

Update: 下面这行是一个错误,我的意思是PI3__ = PI1__

constexpr double PI3__ = PI1;  // I meant PI1__

问题:

  1. Why const int = 3是编译时间常数,但是const double = 3.0不是?

  2. 我有什么理由应该使用constexpr const int val; over constexpr int val?他们俩似乎做的完全一样。


根据您在评论中的回答,这就是我的答案。 C++ 标准已经说得很清楚了。不过 GCC 5.1 在这里工作得很好:https://godbolt.org/g/2oV6Hk

T 类型的转换常量表达式是隐式转换为 T 类型的表达式,其中转换的 表达式是常量表达式,隐式转换序列仅包含 § 5.20 134 c ISO/IEC N4567

[...]

(4.6) — 积分促销 (4.5),

(4.7) — 除收缩转换 (8.5.4) 之外的积分转换 (4.7),

[...]

有关 n4567 中缩小转换 (8.5.4/7) 的参考:

缩小转换是隐式转换

  • 从浮点类型到整数类型,或者
  • 从 long double 到 double 或 float,或者从 double 到 float,除非源是常量表达式并且转换后的实际值在可以表示的值范围内(即使无法精确表示),或者
  • 从整数类型或无作用域枚举类型到浮点类型,除非源是常量表达式,并且转换后的实际值将适合目标类型,并且在转换回原始类型时将产生原始值,或者
  • 从整数类型或无作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是常量表达式,并且转换后的实际值将适合目标类型并在以下情况下产生原始值:转换回原始类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

constexpr 与 const 对比 constexpr const 的相关文章

  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 按成员序列化

    我已经实现了template
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • HTTPWebResponse 响应字符串被截断

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

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

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

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 通过指向其基址的指针删除 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并将其重定向到构建在
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • Mac 上的 Sublime Text 设置

    我正在从 Windows 切换到 Mac 但无法找到sublime settings文件被存储 有人可以指点我的路吗 如果你打开Sublime Text 2 gt Preferences gt Browse Packages the Pac
  • 在 Accordion 中一次打开一个选项卡

    我有一个工作得很好的手风琴 但我需要的是一次只打开一个选项卡 这意味着当打开一个选项卡时 应该关闭另一个选项卡 目前您可以看到我们可以通过单击选项卡链接来打开所有选项卡 代码在这里 accordion gt li gt span click
  • 为了防止性能问题,“滚动链接定位效果”的替代方案是什么?

    我在 Firefox 中收到以下警告 该网站似乎使用了滚动链接定位效果 这可能不适用于异步平移 看https developer mozilla org docs Mozilla Performance ScrollLinkedEffect
  • 复制到剪贴板的图像在 Linux 上不会保留

    我正在尝试将图像保存到系统剪贴板 所以我编写了一些如下代码 usr bin python3 from PyQt5 Qt import QApplication from PyQt5 QtWidgets import QWidget QPus
  • 当父进程被杀死时,使用 fork() 创建的子进程是否会自动被杀死?

    我正在创建子进程fork 在 C C 中 当父进程结束 或由于某种原因被杀死 时 我希望所有子进程也被杀死 这是系统自动完成的吗 还是我必须自己做 先前存在的类似问题 当父进程退出时 如何使子进程退出 如何让子进程在父进程退出后终止 不会
  • iPhone 模拟器在应用程序启动时崩溃

    升级到 Lion 和 XCode 4 1 后 我在使用 iPhone 模拟器时遇到了一些问题 当我启动 4 0 4 1 或 4 2 的模拟器 我从 Time Machine 恢复 时 我得到一个EXC BAD ACCESS几乎立即出现错误
  • 在Python中每n个项目分割一个生成器/迭代器(splitEvery)

    我正在尝试用 Python 编写 Haskell 函数 splitEvery 这是它的定义 splitEvery Int gt e gt e splitEvery n splits a list into length n pieces T
  • pygame精灵墙碰撞[重复]

    这个问题在这里已经有答案了 我正在用 python 和 pygame 开发一个平台游戏 完整代码可以在 https github com C Kimber FBLA Game 我遇到的问题是玩家精灵和墙壁精灵之间的碰撞 特别是角落 当玩家按
  • 术语查找机制可以通过id以外的其他字段查询吗?

    这里是elasticsearch官网关于术语的介绍 https www elastic co guide en elasticsearch reference 2 1 query dsl terms query html 正如我们所看到的
  • 使用 JavaScript 检查浏览器 CSS 属性支持?

    JavaScript 是否可以知道客户端浏览器是否支持 CSS 属性 我说的是CSS3的旋转属性 我只想在浏览器支持的情况下执行某些功能 我相信你可以这样做 if WebkitTransform in document body style
  • 如何手动验证模型的属性?

    我有一堂课叫User和一个财产Name public class User Required public string Name get set 我想验证它 如果有任何错误添加到控制器的ModelState或实例化另一个模型状态 Http
  • 通过互联网的 RMI iiop

    我正在尝试获取 OracleRMI IIOP 示例工作 但我在 Netbeans 中执行此操作时遇到问题 我的代码如下 界面 import java rmi Remote import java rmi RemoteException pu
  • 为什么在 while 循环之后我只获得最后一行值?

    这是我正在阅读的文件 Log1 Time Src id Des id Address 0 34 56 x9870 2 36 58 x9872 4 38 60 x9874 6 40 62 x9876 8 42 64 x9878 Log2 Ti
  • 如何将 FacesMessage 从支持 bean 附加到 ui:repeat 中的特定字段?

    我有一个具有可变数量输入元素的表单 如下所示
  • 创建文件后发生文件共享冲突?

    因此 我尝试创建一个 txt 文件 然后向其中写入一些愚蠢的数据 但我遇到了共享违规 我感觉这可能是因为我试图在创建文件后直接为其创建 StreamWriter 但这没有意义 所以我有点失落 我已经尝试删除类中除错误行之外的所有其他 Str
  • PHP 脚本不会在后台运行

    我正在尝试在后台运行 php CLI 脚本 但它无法运行 它的状态为 已停止 SIGTOU 尝试写入输出 以下是详细信息 Mac OS X Lion 10 7 2 PHP 5 3 6 与 Suhosin Patch cli 构建时间 201
  • 为什么我的 CodeIgniter 表单验证不起作用?

    我正在尝试在使用表单助手创建的简单联系表单上设置验证 根本不会发生任何验证 怎么了 在下面的代码中 无论在表单中输入什么内容 good 关键字始终显示 并且从不显示通过 set value 设置的保存值 控制器 Contact functi
  • CasperJS 不能要求下划线

    我在用着CasperJS运行自动化前端测试 但在我的测试中使用其他 npm 模块时遇到了问题 我知道patchRequire但是我相信这只能在测试环境之外调用 因为测试运行程序补丁会自动需要 我确实包含了它 但结果是一样的 它说找不到该模块
  • 更改 JavaScript Prompt() 显示的格式和文本?

    我正在使用 JavaScriptprompt 功能 var favorite prompt What is your favorite color RED 我使用的是 IE 7 打开的提示框有一个标题栏 上面写着 资源管理器用户提示 还有更
  • constexpr 与 const 对比 constexpr const

    变量上的 const 与 constexpr 这家伙关于 constexpr 的说法是正确的if double被使用 或float当然 但是 如果您将 var 类型更改为double对于像 int char 等整数类型 一切正常 为什么会发