C++ 常量

本文内容绝大部分出自:cppreference


1概念:

常量,是在编译期间就可以求得值的量,常量通常可以作为数组长度,模板非类型参数等
核心常量表达式,核心常量是一个无意义的规定性概念,概念内容是:只要不存在对某些特定的表达式求值,那么这个表达式就是核心常量表达式.

字面类型:

字面类型是标准之外的一个用于统一说法的一个定义:
字面类型包括:
可有cv限定的void
标量类型
引用类型
字面类型的数组
可有cv限定的类类型,并且包含:
    平凡析构
    聚类或含有constexpr构造或为闭包类型
    对于class而言:
        对于联合体,那么至少有一个非静态数据成员是volatile字面类型
        对于非联合体,所有非静数据成员和基类是非volatile的
其中,字面类型是constexpr所拥有的类型,只能通过constexpr函数操作和返回.

核心常量表达式:

(批注:始于表达式之内的例子,最好证明的就是发生在函数调用,实参是一个核心常量,形参则始于表达式之内)
除了存在表达式对以下项求值之外的表达式都是核心常量表达式:
1:除了constexpr的类成员函数(包括构造函数)内使用的this,其余对this(间接)求值的表达式均不是核心常量表达式
2:调用不为constexpr的函数(包括构造函数)的函数调用表达式
3:调用了声明为constexpr,但是无定义的
4:调用constexpr模板函数,但是模板实例化后无法满足constexpr函数要求的
5:对于不同实现的特殊要求,如果存在超出的情况的表达式
6:一个constexpr表达式,但是可以导致未定义行为的(溢出,越界,悬空指针)
7:Lambda
8:左值到右值的隐式转换,除非这个左值有以下性质:
    拥有整数或枚举类型,并且指代完整的非volite的const对象,并且该对象以核心常量表达式初始化
    指代字符串字面量元素的非volatile泛左值
    拥有字面类型,并指代以constexpr定义的非volite对象,或模板参数对象
    拥有字面类型,并指代生存期始于此表达式的求值内的非volate对象
9:指代引用类型变量,或数据成员的id,除非该引用以常量表达式初始化,或生存期始于该表达式求值
10:从(cv)void*转为任何类型的表达式
11:dynamic_cast,reinterpret_cast
12:伪析构调用
13:自增自减(新版本为14,在C++14前生效)
14:对象的修改,除非对象是非volatile字面类型,并且是始于该表达式求值内的
15:typeid,对象为多态
16:new,delete
17:throw
18:结果未指定时的关系运算
19:赋值,复合赋值(C++14前)
20:三路比较(C++20)


整形常量表达式

即满足上述左值转为纯右值的要求的整数或无作用域枚举<即:非voliate的const或枚举,经过核心常量表达式初始化的,指代字面量元素的非voliate的泛左值或constexpr定义的非voliate对象,或模板参数对象,生存期始于当前表达式求值的非,voliate对象>如果是类类型表达式,则服从于对象的隐式转换,转换为整数,无作用域枚举.
    

经转换的整形常量表达式

即通过转换到类型T的表达式,其中转换后的表达式是常量表达式,并且隐式转换的序列有:
constexpr用户定义转换
左值到右值(满足上述规则)
整数类型提升
非窄化整数转换

常量表达式

常量表达式通常指代:
在泛左值中:
有静态存储期,并且非零时对象
函数
静态存储期的零时对象,值满足下列纯右值制约
在纯右值中:
类类型对象,其中每个引用类型的非静态数据成员指代满足上述对泛左值制约的实体
若值是类类型对象,则其每个引用类型的非静态数据成员指代满足上述对泛左值制约的实体
若值有指针类型,则它保有
拥有静态存储期的对象地址
拥有静态存储期的对象的结尾后一位置地址
函数地址
空指针值
若值拥有类或数组类型,则每个子对象满足这些对值的制约
满足以上者,为常量表达式.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容