首页 > 其他分享 >constexpr有什么用

constexpr有什么用

时间:2023-06-23 14:57:10浏览次数:23  
标签:return 函数 int 什么 constexpr 类型 构造函数

简介

constexpr是C++11引入的关键字。它的意思是常量表达式,但是与之前的常量const不同,constexpr会在编译期就计算完该值,从而提高了性能。同时constexpr也可以用来修饰函数、类的构造函数等,不止是变量。

适用于constexpr的类型

根据微软的文档,只有文本类型或者返回文本类型的函数能被指定为constexpr
文本类型:

  • 标量类型:算术类型 (整型或浮点值) 、枚举类型成员、指针类型、指针到成员类型和 std::nullptr_t。 基本类型通常是标量类型。
  • void
  • 引用。
  • 引用的数组。
  • 具有普通析构函数以及一个或多个 constexpr 构造函数且不移动或复制构造函数的类。 此外,其所有非静态数据成员和基类必须是文本类型且不可变。

constexpr函数

constexpr函数的返回值可以用来初始化constexpr变量。
constexpr函数,如果给他传参是常量表达式,那么他会返回constexpr,否则它就和正常函数一样工作。

一个例子

constexpr int a_len()
{
	return 5;
}

constexpr int fibonacii(const int n)
{
	return n == 1 ? n : n * fibonacii(n - 1);
}

int main()
{
	char arr[a_len()]; // 合法
	constexpr int f = fibonacii(5); // 编译期完成计算
	return 0;
}

标签:return,函数,int,什么,constexpr,类型,构造函数
From: https://www.cnblogs.com/st0rmKR/p/17499147.html

相关文章

  • 【并发编程】为什么Hashtable和ConcurrentHashMap 是不允许键或值为 null 的,HashMap
    原文链接:https://blog.csdn.net/cy973071263/article/details/126354336目录一、从源码的角度分析原因1.1Hashtable1.2ConcurrentHashMap1.3HashMap二、从架构设计的角度分析原因2.1为何不支持null值?2.1.1ConcurrentHashMap2.1.2Hashtable2.1.3HashMap2.2......
  • 关于byte的范围为什么是-128到127
    一基础知识在讲byte的范围前,先普及下在java中数据在计算机中的表示方法,数据在计算机中都是用二进制表示的,并且是用补码进行数据计算的。先引入原码,反码,补码:原码:原码是一种计算机中对数字的二进制定点表示方法,一般进制的最高位是符号位,1代表负号,0代表正号。原码举例:(对于十进制......
  • mysql的数据类型以及mysql中的int11是什么意思
    今天抽时间来讲一下mysql里的知识点,之前有不少人问过我,mysql中的int(11),这个11到底是啥意思?是11位的意思吗?你是否也想过这个问题,是否也有这个疑问?ok,今天就展开来讲一下,用通俗易懂的大白话来给你彻底搞明白一、跟你扯点二进制的小东西要讲清楚这个问题,我先来给大家科普一点计算......
  • CPU核数和线程数有什么作用?
    我们在选择服务器配置的时候,CPU的性能也是咱们需要考虑的一点,除了考虑架构、工艺、单核性能等,还需要考虑核心数和线程数量,CPU从早期的单核,发展到现在的双核、多核,除了核心数量之外,还有线程数量也是越来越多那么CPU核数和线程数有什么作用?CPU核数和线程数什么意思?今天我给大家分享CP......
  • [QML]事无巨细开始实践QML开发(一)什么是QML,为什么学习QML,先写一个简单的页面
    [QML]从零开始QML开发(一)什么是QML,为什么学习QML,先写一个简单的页面QML开发和QWidget开发的区别QML(QtMeta-ObjectLanguage)是Qt提供的一种声明性语言,用于快速创建用户界面。相对而言,QtWidgets是基于C++的桌面应用程序开发框架。下面是QML和QtWidgets之间的一些优缺点以及为何......
  • C++面试八股文:override和finial关键字有什么作用?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第22面:(二师兄好苦逼,节假日还在面试。。。)面试官:C++的继承了解吗?二师兄:(不好意思,你面到我的强项了。。)了解一些。面试官:什么是虚函数,为什么需要虚函数?二师兄:虚函数允许在基类中定义一个函数,然后在派生类中进行重写(override)。二......
  • C++面试八股文:什么是左值,什么是右值?
    C++面试八股文:什么是左值,什么是右值?某日二师兄参加XXX科技公司的C++工程师开发岗位第16面:面试官:什么是左值,什么是右值?二师兄:简单来说,左值就是可以使用&符号取地址的值,而右值一般不可以使用&符号取地址。inta=42; //a是左值,可以&aint*p=&a;int*p=&42; //42是右......
  • Maven小知识:1.packagingpompackaging是什么意思?2.propertiesproperties标签作用?3.depe
    Maven小知识:(1)<packaging>pom</packaging>是什么意思?1、配置<packaging>pom</packaging>的意思是使用maven分模块管理,都会有一个父级项目,pom文件一个重要的属性就是packaging(打包类型),一般来说所有的父级项目的packaging都为pom,packaging默认类型jar类型,如果不做配置,maven会将......
  • CAS是什么
    CAS又称自旋锁、无锁,是一种乐观锁compareandswap的缩写意为:比较并交换,实现并发算法的常用技术,就是说我不用加锁,也能保证(加锁会影响效率,可以考虑使用原子操作类)原子性,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而......
  • 在finally中出现return会发生什么?
    目录看点:面试题:看点:当Java程序执行try块、catch块时遇到了return或throw语句,这两个语句都会导致该方法立即结束,但是系统执行这两个语句并不会结束该方法,而是去寻找该异常处理流程中是否包含finally块,如果没有finally块,程序立即执行return或throw语句,方法终止;如果有finally块,系......