C++11 constexpr简单用法

2023-11-15

关键字 constexpr 是C++11中引入的关键字,声明为constexpr类型的变量,编译器会验证该变量的值是否是一个常量表达式。
声明为constexpr的变量一定是一个常量,而且必须用常量表达式初始化:

constexpr int mf = 0; // 0 是常量表达式
constexpr int limit = mf + 1; // mf + 1 是常量表达式
constexpr int sz = size(); // 只有当 size() 是一个constexpr函数时才是一条正确的声明语句

constexpr 函数是在使用需要它的代码时,可以在编译时计算其返回值的函数。当其参数为 constexpr 值并且在编译时使用代码需要返回值时(例如,初始化一个 constexpr 变量或提供一个非类型模板参数),它会生成编译时常量。使用非constexpr 参数调用时,或编译时不需要其值时,它将与正则函数一样,在运行时生成一个值。
const 和 constexpr 变量之间的主要区别在于:const 变量的初始化可以延迟到运行时,而 constexpr 变量必须在编译时进行初始化。所有 constexpr 变量均为常量,因此必须使用常量表达式初始化。

#include <iostream>

using namespace std;
template<typename T, int N>
constexpr int length(const T(&ary)[N])//检查数组长度
{
    return N;
}

constexpr int fac(int n)//递归
{
    return n == 1 ? 1 : n*fac(n - 1);
}

int main(int argc, char const *argv[]) {
    //constexpr int f5 = fac(5);
     const int nums[]{ 1, 2, 3, 4 };
    cout<<fac(5)<<endl;

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

C++11 constexpr简单用法 的相关文章

  • 以编程方式在网格视图列上显示数据

    我有一个产品数量列表和一个网格视图 网格视图已经绑定到一些数据 但我想在网格视图的第三列显示产品数量列表 以下是如何将数据绑定到网格视图的代码 gvProduct DataSource distSPUItem gvProduct DataB
  • 在派生自 Control 的 ASP.NET 自定义控件中呈现自关闭标记

    我正在开发 Facebook FBML 控件库 并希望创建类似于 ASP NET WebControls 库的 FBML 控件 我有一个默认处理渲染的基类 这是我的渲染方法 protected override void Render Ht
  • 查找周边上的点来表示边界/形状

    我有一个简单的二维网格 其格式为myGrid x y 我正在尝试找到一种方法来找到所选网格周围的周长 这样我就有了所选网格的形状 这是我的意思的一个例子 这里的想法是找到所有相关的 角点 也就是图像周边的红点 放入一个列表中 这样我就可以从
  • 有了private修饰符,为什么可以直接访问其他对象中的成员呢?

    我有以下代码 class A private int x public A x 90 A A a1 A a2 a1 x 10 a2 x 20 int getX return this gt x 我知道代码可能很奇怪 但我不明白为什么a1 a
  • 终止以 System.Diagnostic.Process.Start("FileName") 启动的进程

    我正在尝试创建一个将在特定时间执行操作的应用程序 很像 Windows 任务计划程序 我当前正在使用 Process Start 来启动任务所需的文件 或 exe 我通过调用文件 mp3 启动一个进程 该进程启动 WMP 因为它是默认应用程
  • 使用 boost::asio 是否有一种可移植的方法来查找空闲端口号

    我目前正在尝试找出一种方法来查找空闲端口号以建立连接 最好使用 boost asio 然后 该端口号将用于侦听 只有这样我才能打开套接字 大致来说 有没有办法做到 tcp resolver query query localhost por
  • 如何使用“std::array”作为“template class”形式的模板参数?

    请考虑以下事项tree class template
  • DLR 返回类型

    我需要 DLR 的帮助 我正在实现 IDynamicMetaObjectProvider 和 DynamicMetaObject 但在获取预期返回类型时遇到一些问题 我在元对象中覆盖 BindInvokeMember 我可以看到所有参数类型
  • std::make_shared 作为默认参数无法编译

    在 Visual C 2008 和 2010 中 以下代码无法编译并出现以下错误 include
  • 使用 openssl 库获取 x509 证书哈希

    我目前正在开发一个应用程序 它使用 openssl 库 libcrypto 来生成证书 现在我必须获取现有证书的哈希值 当我使用终端时 我可以使用以下命令生成哈希值 openssl x509 hash in cert pem noout 输
  • 向量和常量

    考虑一下这个 void f vector
  • 如何从 MongoDB 中的 ChangeStream 过滤对特定字段的更新

    我正在设置一个 ChangeStream 以便在集合中的文档发生更改时通知我 以便我可以将该文档的 LastModified 元素更新插入到事件发生的时间 由于此更新将导致 ChangeStream 上发生新事件 因此我需要过滤掉这些更新以
  • 对嵌套属性使用 XmlAttributeOverrides

    我试图使用 XmlAttributeOverrides 来控制类序列化后哪些类属性出现在 xml 中 它适用于 根 类上的属性 但不适用于嵌套属性 这是一个简单的例子来说明我想要完成的任务 我的类层次结构如下 public class Ma
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 实例着色器矩阵的设置

    我想绘制实例立方体 我可以打电话GL DrawArraysInstanced PrimitiveType Triangles 0 36 2 成功地 我的问题是所有立方体都绘制在相同的位置和相同的旋转 我如何为每个立方体单独更改它 要创建不同
  • 如何设置扬声器声音增强设置

    如何以编程方式设置 Windows 扬声器设置 增强 选项卡 中可用的声音效果 恐怕这是不可能的 参见 Maurits 对他的评论blog http blogs msdn com b matthew van eerde archive 20
  • { Qt5.0.2/QML/QtQuick2.0/C++ } 运行没有错误的示例项目? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的设置是Qt5 0 2 MinGW 32位 我在寻找 Qt5 0 2 QML QtQuick2 0 C 代码项目示例 不是Qt Qu
  • 为 winforms ComboBox 中的单个项目着色?

    我遇到了一个困境 我有一个表单 其中包含许多组合框 其中包含在某些情况下可能无效 过时的信息 选项 项目 我不能简单地从项目中删除过时的信息 但我确实想在选项无效时为用户提供视觉线索 我正在考虑对项目进行着色 可能是红色 来指示它们是否无效
  • C++ 从文件中读取字符串

    我试图将字符串直接存储到一个文件中 以便稍后在 C 中读取 基本上 对于整个范围 我试图将带有字符串变量的对象数组存储在文件中 并且这些字符串变量将通过类似 object 的内容读取 0 字符串 然而 每次我尝试读取字符串变量时 系统都会给
  • 文件按文件名模式存在

    我在用 File Exists filepath 我想做的是将其替换为模式 因为文件名的第一部分发生了变化 例如 该文件可以是 01 peach xml 02 peach xml 03 peach xml 如何根据某种搜索模式检查文件是否存

随机推荐

  • hx711基准电压_(完整版)hx711基本原理讲解

    基本原理讲解 1 5kg 传感器 满量程输出电压 激励电压 灵敏度 1 0mv v 例如 供电电压是 5v 乘以灵敏度 1 0mv v 满量程 5mv 相当于有 5Kg 重力产生时候产生 5mV 的电压 2 711 模块对产生的 5mV 电
  • CentOS 8 最新阿里YUM源

    前文 由于CentOS8 已停止服务 相关源已经停止 前期官方自带的源和前期 阿里 清华 网易 等等的源 都已无法再使用 需要更换源 安装程序时报错 Failed to synchronize cache for repo AppStrea
  • 【Spring源码系列】Bean生命周期-Bean销毁

    文章目录 前言 一 Bean销毁介绍 bean销毁的时机 spring注册DestroyBean时机 定义bean销毁方式以及源码调试 使用 PreDestroy注解 实现DisposableBean或者AutoCloseable接口 手动
  • 使用Redisson实现Java分布式锁

    在分布式系统中 实现并发控制是一个重要的问题 分布式锁是一种常见的解决方案 它可以确保在分布式环境下只有一个进程能够访问共享资源 Redis是一种流行的内存数据存储系统 它提供了分布式锁的功能 在Java中 可以使用Redisson库来集成
  • SpringBoot(三):集成Mybatis

    1 Mybatis逆向工程 逆向工程即为通过数据库逆向生成model类和mapper文件以及接口文件 步骤如下 1 1在pom文件中加入mybatis相关依赖
  • Android系列开发博客资源汇总

    CSDN博客本期热文推荐 为您介绍有关Android应用开发的10个博客 分享他们的日积月累的宝贵经验 希望这些文章对Android开发者们能有所启发和帮助 1 张国威 Android从入门到提高系列 前面写了十四篇关于界面的入门文章 大家
  • Ansible自动化运维工具之playbook剧本编写

    内容预知 目录 内容预知 1 playbook的相关知识 1 1 playbook 的简介 1 2 playbook的 各部分组成 2 基础的playbook剧本编写实例 实例1 playbook编写 apache的yum安装部署剧本 实例
  • 数据治理体系解决方案(附PPT下载)

    下载方式 迎加入星球下载所有资料 转发朋友圈截图回复666亦可下载 加入星球好资料一直有 推荐阅读 世界的真实格局分析 地球人类社会底层运行原理 不是你需要中台 而是一名合格的架构师 附各大厂中台建设PPT 亿级 无限级 并发 没那么难 论
  • java基于微信小程序的四六级英语学习测试系统 uinapp 计算机毕业设计

    通过本课题的研究与分析 能够建立一种基于微信小程序的四六级助手系统 以MySQL为数据库 后端采用Java语言SSM框架 并对系统中的各个模块功能及它们之间相互协调工作进行了详细的分析与设计 尤其是对实现方法和过程进行了细致的设计与实现 最
  • Python动态的拼接变量名

    1 可以通过python的内置函数locals 来完成 locals是python的内置函数 他可以以字典的方式去访问局部和全局变量 python里面用名字空间记录着变量 就像javascript的window一样 他记录着各种全局变量 每
  • R语言数据可视化之初级绘图(上)

    1 条形图barplot 条形图通过垂直的或者水平的条形展示了类别型变量的频数分布 barplot 可实现条形图的绘制 其调用格式为 barplot x xlab yalb horiz F barplot x xlab ylab besid
  • 3.when表达式

    val week 0 Java的 if 语句 KT的 if 是表达式 有返回值的 val info when week 1 gt 今天是星期一 非常忙碌的一天开会 2 gt 今天是星期二 非常辛苦的写需求 3 gt 今天是星期三 努力写Bu
  • GirdLayout布局实现九宫格

    利用GirdLayout布局显示3 3布局的9张图片 每张图片宽度为屏幕的1 3
  • oracle 列相同编号,Oracle查询结果中:一列中相同的值或一列中重复的值,只显示一次...

    http www itpub net thread 1768915 1 1 html 问题 CREATE TABLE test ob id VARCHAR 32 ob name VARCHAR 32 INSERT INTO test VAL
  • Ioc容器refresh总结(2)--- Spring源码从入门到精通(三十二)

    上篇文章介绍了refresh里beanFactory的创建预准备工作 refresh获取到的beanFactory是先刷新创建 在getBeanFactory获取到的 之后再给他配置忽略自动装配的依赖接口 和配置自动装配的组件 Ioc容器r
  • IAR修改字体大小,source insight中文乱码

  • Gradle学习笔记 使用插件

    前面说了不少内容 但是我看了一下Gradle官方文档内容太多太详细 其中大部分内容其实我们不需要知道 一般情况下我们应用一部分插件就可以了 自己编写Gradle任务的情况并不多见 Java插件 在build gradle文件中添加以下一句
  • 搭建GitHub授权登录

    功能 搭建 功能 实现GitHub授权 获取用户在GitHub的有关信息 搭建 注册app 在GitHub的setting gt Developer Settings 开发者设置 中 点击New OAuth App 新建OAuth应用 根据
  • WebService 四种发布方式总结

    1 CXF方式 CXF与spring搭建webservice是目前最流行的方式 但是传闻cxf与jdk1 5有些不兼容 我没有遇到过 我遇到的问题是cxf与was6 1 1不兼容 表现在cxf必须的jar包 wsdl4j 1 6 2 jar
  • C++11 constexpr简单用法

    关键字 constexpr 是C 11中引入的关键字 声明为constexpr类型的变量 编译器会验证该变量的值是否是一个常量表达式 声明为constexpr的变量一定是一个常量 而且必须用常量表达式初始化 constexpr int mf