c++11新特性----constexpr (编译时常量)
来源:互联网 发布:建信优化成长基金净值 编辑:程序博客网 时间:2024/05/18 08:11
常量表达式的值需要在编译时确定。只有字面值类型(Literal type)能被定义为constexpr。
尽管指针和引用能把定义成constexpr,但他们的初始化值要求很严。一个constexpr指针的初始值必须是nullptr/0或者是存储于某个固定地址中的对象。
函数体内定义的变量,一般来说没有固定地址,所以constexpr指针不能指向这样的变量。相反,所有定义在函数体之外的对象,地址都是固定不变的,能用来初始化constexpr指针。某些在函数体内定义有固定地址的变量(如局部static变量),也能用来初始化constexpr。
当constexpr修饰指针时,表示的意义与const相差甚远。
如
const int* p = nullptr;// low-const
constexpr int* q = nullptr;// top-const(类似于int* const q = nullptr)
p是一个指针变量,指向一个int型常量。而q是一个编译时常量,q的值不能变,但q指向的对象值可以改变。
constexpr常量可以用字面值初始化,也可以用constexpr函数初始化。constexpr函数满足条件如下
1、函数返回类型以及所有的参数类型都必须是constexpr
2、函数有且只有一个return语句
编译器会将constexpr函数视为内联函数!所以在编译时若能求出其值,则会把函数调用替换成结果值。
看下面的代码
constexpr test(size_t s) { ruturn 4*s;}
int a[test(2)]; //正确
int i = 2; int a[test(i)]; // 错误。这个返回值不是编译时常量。不能用来定义数组的长度。
- c++11新特性----constexpr (编译时常量)
- 编译时常量和运行时常量
- 编译时常量
- 编译时常量enum
- C++11新特性之constexpr 限定符
- 【C++11】新特性——常量表达式constexpr
- Thinking in C++: static const (类中的编译时常量)
- 条款2:运行时常量(readonly)优于编译时常量(const)
- Effective C# Item2:运行时常量(readonly)优于编译时常量(const)
- 运行时常量(readonly)优于编译时常量(const)
- 编译时常量 const VS 运行时常量 readonly
- java中的编译时常量与运行时常量
- 编译时常量和编译时变量
- 改善C#程序的50种方法 条款2:运行时常量(readonly)优于编译时常量(const)
- Java编译时常量类型、赋值类型
- 常数必须是编译时常量!
- 使常数必须是编译时常量!
- C++11中的有趣的新特性(constexpr ) (Range-based for loop)
- 数据库_jdbc_连接池+框架_改造分页案例
- jquery dialog打开时,焦点自动在第一个text框上
- 第十三周上机实践项目——汉诺塔
- 微博 vs 博客 思维表达的艺术
- http://xinsheng.huawei.com/cn/index.php?app=forum&mod=Detail&act=index&id=140320
- c++11新特性----constexpr (编译时常量)
- oc学习之旅:简单协议
- x264详细讲解
- Plan 9 简介
- reviewboard搭建-centos6.3
- 错误的TAF配置导致应用不能重连DB
- linux安装.deb格式的软件
- 使用PL/SQL将EXCEL数据导入到ORACLE数据库中
- RCP设置TreeViewer 的表格行高、TableViewer的item间距