c++11 常量表达式
2017-11-05 14:25
295 查看
c++11 常量表达式
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vector> #include <map> /** * 常量表达式主要是允许一些计算发生在编译时,即发生在代码编译而不是运行的时候。 * 这是很大的优化:假如有些事情可以在编译时做,它将只做一次,而不是每次程序运行时都计算。 */ /* constexpr函数的限制: 函数中只能有一个return语句(有极少特例) 函数必须返回值(不能是void函数) 在使用前必须已有定义 return返回语句表达式中不能使用非常量表达式的函数、全局数据,且必须是一个常量表达式 */ constexpr int GetConst() { return 3; } //err,函数中只能有一个return语句 constexpr int data() { constexpr int i = 1; return i; } constexpr int data2() { //一个constexpr函数,只允许包含一行可执行代码 //但允许包含typedef、 using 指令、静态断言等。 static_assert(1, "fail"); return 100; } int a = 3; constexpr int data3() { return a;//err, return返回语句表达式中不能使用非常量表达式的函数、全局数据 } /* 常量表达式的构造函数有以下限制: 函数体必须为空 初始化列表只能由常量表达式来赋值 */ struct Date { constexpr Date(int y, int m, int d): year(y), month(m), day(d) {} constexpr int GetYear() { return year; } constexpr int GetMonth() { return month; } constexpr int GetDay() { return day; } private: int year; int month; int day; }; void mytest() { int arr[GetConst()] = {0}; enum {e1 = GetConst(), e2}; constexpr int num = GetConst(); constexpr int func(); //函数声明,定义放在该函数后面 constexpr int c = func(); //err, 无法通过编译, 在使用前必须已有定义 constexpr Date PRCfound {1949, 10, 1}; constexpr int foundmonth = PRCfound.GetMonth(); std::cout << foundmonth << std::endl; // 10 return; } constexpr int func() { return 1; } int main() { mytest(); system("pause"); return 0; }
相关文章推荐
- C++11常量表达式
- C++11系列-常量表达式
- C++11:常量表达式
- C++11 常量表达式
- 【C++11】新特性——常量表达式constexpr
- C++11之常量表达式
- c++11 constexpr常量表达式
- C++11 FAQ中文版:常量表达式(constexpr)
- constexpr与常量表达式(c++11标准)
- C++11系列-常量表达式
- C++11 FAQ中文版:常量表达式(constexpr)
- C++11系列-常量表达式
- C++11系列-常量表达式
- C++11系列-常量表达式
- C++11特性(11):常量表达式(值)
- 【学习笔记】JavaScript——变量、常量、保留字、运算符与表达式、语句
- 【正则表达式1】C++11正则表达式
- c++11 正则表达式
- C:常量、变量 、 表达式 、运算符、 枚举
- C++11 lambda 表达式解析