C++11:常量表达式
常量表达式主要是允许一些计算发生在编译时,即发生在代码编译阶段而不是代码运行阶段。这是很大的优化,因为如果有些事情可以在编译时做,那么它只会做一次,而不是每次程序运行时都计算。
使用constexpr,你可以创建一个编译时的函数:
constexpr int getConst()
{return 3;
}
void test07()
{int arr[getConst()] = { 0 };enum {e1 = getConst(),e2 };const int num = getConst();cout << sizeof(arr) / sizeof(arr[0]) << endl;cout << num << endl;
}
constexpr函数的限制
- 函数中只能有一条return语句
- 函数必须有返回值
- 在使用前必须定义
- return返回语句表达式中不能使用非常量表达式的函数、全局数据。只能是一个常量表达式
//函数中只能有一条return语句,在linux下编译失败,在vs2017上编译通过
constexpr int getconst()
{constexpr int i = 1;return i;
}
// 函数必须返回值,不能是void函数,因为函数必须有返回值,要不然该函数有什么用呢?
constexpr void getconst2()
{return;
}
constexpr int data2()
{// 一个constexpr函数,只允许包含一行可执行代码//但允许包含typedef、 using 指令、静态断言等。static_assert(1, "fail");return 100;
}
int a = 3;
constexpr int data3()
{return a;// return返回语句表达式中不能使用非常量表达式的函数、全局数据
}int main(int argc, char ** argv)
{constexpr int func();//函数声明,定义放在main后面constexpr int c = func();// 无法通过编译,在使用前必须已经有定义system("pause");return 0;
}
常量表达式的构造函数有以下限制
- 函数体必须为空
- 初始化列表只能由常量表达式来赋值
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;
};int main()
{constexpr Date PRCfound {1949, 10, 1};// 必须是常量表达式constexpr int foundmonth = PRCfound.GetMonth();// vs2017下失败了,linux下成功cout << foundmonth << endl; // 10return 0;
}
C++11:常量表达式相关推荐
- c++11 常量表达式
c++11 常量表达式 #define _CRT_SECURE_NO_WARNINGS#include <iostream> #include <string> #includ ...
- [C++11]常量表达式函数
constexpr修饰函数. 普通函数/类成员函数. 1.函数必须要有返回值,并且return返回的表达式必须是常量表达式. 代码如下: #include <iostream> using ...
- C++11之常量表达式(const与constexpr的区别)
系列文章 C++11之正则表达式(regex_match.regex_search.regex_replace) C++11之线程库(Thread.Mutex.atomic.lock_guard.同步 ...
- c语言 常量表达式,C++11 constexpr:验证是否为常量表达式(长篇神文)
constexpr 是 C++ 11 标准新引入的关键字,不过在讲解其具体用法和功能之前,读者需要先搞清楚 C++ 常量表达式的含义. 所谓常量表达式,指的就是由多个(≥1)常量组成的表达式.换句话说 ...
- C++11 nullptr与常量表达式constexpr记录
1.nullptr (1) nullptr是一个关键字,而nullptr_t是一个类型 typedef decltype(nullptr) nullptr_t 使用nullptr_t类型必须包含#in ...
- 常量表达式(constexpr)
首先,常量表达式的概念:在编译期就可以计算出结果的表达式 那么为什么要用常量表达式呢,用常量表达式会有什么好处: 1.允许一些计算只在编译时进行一次,而不是每次程序运行时: 2.编译器可以进行尺度更大 ...
- c++nullptr(空指针常量)、constexpr(常量表达式)
总述 又来更新了,今天带来的是nullptr空指针常量.constexpr(常量表达式)C++的两个用法.Result result_fun = nullptr;constexpr stati ...
- C++常量表达式函数
目录 常量表达式的功能 constexpr关键字和用户定义型别 constexpr对象 constexpr函数 constexpr模版 整数字面值即为常量表达式(constant expression ...
- (P3-P4)constexpr修饰常量表达式和常量表达式函数
文章目录 1. const 2.constexpr 3.常量表达式函数 1. const 在 C++11 之前只有 const 关键字,从功能上来说这个关键字有双重语义:变量只读,修饰常量 eg: v ...
最新文章
- C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)
- python自学攻略-Python自学攻略
- 使用函数PIVOT现实数据行转列
- 从一个帖子看部分大学生的学习心态
- Java基本流程控制语句
- crossdomain.xml配置不当的利用和解决办法
- Linux logo和屏幕光标
- torch.view(), squeeze, unsqueeze
- java response cookie_JavaWeb部分 (Response Cookie)
- Linux命令--- /dev/null和/dev/tty
- express : 无法将“express”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。express: command not found
- 【iCore4 双核心板_FPGA】例程一:GPIO输出实验——点亮LED
- php data取年月,PHP-date函数 年、月、日参数详解
- java ocr linux_linux (centos7)上装Tesseract-OCR最新版本(5.0)
- 大型企业通用ERP进销存源码 ASP.Net开发系统源码
- Python爬取实习僧职位信息
- classes是什么意思怎么读_class是什么意思_class的翻译_音标_读音_用法_例句_爱词霸在线词典...
- 层次softmax (hierarchical softmax)理解
- MATLAB运用all函数剔除0元素
- Java多线程游戏实例分享2-雷火(手把手教你做个超炫酷的星际争霸)