C++ 11: constexpr

目的:常量表达式中可以被调用的足够简单的函数,和用户自定义的类型常量对象可以使用足够简单的构造函数创建。

常量表达式

首先明确一个概念, const expression (常量表达式),指的是在编译器可以被求值的表达式。可以在如下的场合使用:

  1. 数组大小,switch case的值,枚举值的定义
  2. 模板参数的非类型的特化的值
  3. 静态存储对象的静态初始化

常量表达式函数

一个函数如果是常量表达式函数,它需要满足

  • 有返回值,级不能 return void
  • 它的函数体仅为 return expr; 形式,即仅可有一条简单的 return语句 。expr 是一个常量表达式。
  • 使用 constexpr修饰

一个常量表达式函数可以被一个非常量表达式调用,此时,常量表达式函数并不需要保证能够在编译器求值。
常量表达式函数不支持递归。

常量表达式数据

常量表达式数据指的是使用constexpr声明的变量或者数据成员。其必须被常量表达式初始化,或者是被常量表达式构造函数(其参数也应为常量表达式)创建的右值。

使用constexpr的声明的变量和数据成员行为上类似使用const声明的变量和数据成员,除了前者在使用之前需要初始化和它必须使用常量表达式来初始化。

常量表达式构造函数

常量表达式构造函数需要满足以下几点:

  • constexpr 指示符修饰的构造函数
  • 使用初始化列表时,初始化列表的值都应为常量表达式。
  • 函数体为空
    使用常量表达式构造函数(参数也为常量表达式)构造的用户自定义类型的对象,称为用户自定义常量。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.前言 编译期表现的加强有外部模板运行期表现强化有右值引用、move语义、constexpr – 泛化的常量表示...
    不若疏狂阅读 1,882评论 0 0
  • c++ constexpr构造函数有什么作用 给构筑bai函数加上constexpr之后, 这个构筑函数就只能du...
    DesertCactus阅读 4,724评论 0 0
  • 1. C++基础 大多数编程语言通过两种方式来进一步补充其基本特征1)赋予程序员自定义数据类型的权利,从而实现对语...
    王侦阅读 4,125评论 0 3
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,166评论 1 51
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 128,488评论 2 7

友情链接更多精彩内容