c++ 常量表达式_c++符号常量

c++ 常量表达式_c++符号常量常量表达式主要是允许一些计算发生在编译时,即发生在代码编译阶段而不是代码运行阶段。这是很大的优化,因为如果有些事情可以在编译时做,那么它只会做一次,而不是每次程序运行时都计算。使用constexpr,你可以创建一个编译时的函数:constexprintgetConst(){ return3;}voidtest07(){ intarr[getConst()]={0}…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

常量表达式主要是允许一些计算发生在编译时,即发生在代码编译阶段而不是代码运行阶段。这是很大的优化,因为如果有些事情可以在编译时做,那么它只会做一次,而不是每次程序运行时都计算。
使用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函数的限制

  1. 函数中只能有一条return语句
  2. 函数必须有返回值
  3. 在使用前必须定义
  4. 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;
}

常量表达式的构造函数有以下限制

  1. 函数体必须为空
  2. 初始化列表只能由常量表达式来赋值
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;  // 10

    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188004.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月17日 下午9:43
下一篇 2026年4月17日 下午9:49


相关推荐

  • 开机出现efi shell解决

    开机出现efi shell解决解决方法:电脑关机,放一会儿,自动就好了。前提是,电脑小白,以前或者现在没改过bois配置,我相信大部分都不会无聊到改bois配置。实际情况,我用手机找问题解决方法加上在电脑上试着解决,大概花了30多分钟吧。所以,出现这个问题,就把电脑晾一边,放30多分钟,具体估计因电脑而异。问题背景:打开,关闭,操作电脑软件太快了,具体有模拟器,网页,androidstudio,其实和平时相比…

    2022年7月24日
    95
  • HTML网页设计结课作业 榆林子州 HTML5响应式旅游景区网站模板

    HTML网页设计结课作业 榆林子州 HTML5响应式旅游景区网站模板网站布局方面 计划采用目前主流的 能兼容各大主流浏览器 显示效果稳定的浮动网页布局结构 网站程序方面 计划采用最新的网页编程语言 HTML5 CSS3 JS 程序语言完成网站的功能设计 并确保网站代码兼容目前市面上所有的主流浏览器 已达到打开后就能即时看到网站的效果 网站素材方面 计划收集各大平台好看的图片素材 并精挑细选适合网页风格的图片 然后使用 PS 做出适合网页尺寸的图片 网站文件方面 网站系统文件种类包含 html 网页结构文件 css 网页样式文件 js 网页特效文件 images 网页图片文件

    2026年3月19日
    2
  • ES6 Promise用法小结

    ES6 Promise用法小结目录1.什么是Promisereject的用法catch的用法all的用法race的用法1.什么是PromisePromise是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。Promise对象有以下两个特点。(1)对象的状态不受外界影响。Promise对象代表一个异步操…

    2022年6月12日
    35
  • 解锁智能办公新时代,科大讯飞鼠标Lite-M320星火版让工作更轻松!

    解锁智能办公新时代,科大讯飞鼠标Lite-M320星火版让工作更轻松!

    2026年3月14日
    4
  • ChatGPT免费用户可以使用Deep Research啦!并且o3、o4-mini的可使用次数翻倍!

    ChatGPT免费用户可以使用Deep Research啦!并且o3、o4-mini的可使用次数翻倍!

    2026年3月15日
    3
  • 大学生一个暑假学会5个神仙赚钱技能 | 你学会了几个?记得收藏哟

    大学生一个暑假学会5个神仙赚钱技能 | 你学会了几个?记得收藏哟非常建议我的大学生粉丝以及朋友在这个炎热的夏天暑假拿出一部分来学会或提升这5个神仙技能、尤其是当你对你的大学专业不满意的时候,但不仅能帮你的大学不知识更加优秀,还可以让你的毕业后都有赚钱的第二副业技能、记得必须选一个学会哟、目前我自己除了视频剪辑不会之外、其他的多多少少、术业有专攻、只是熟练程度不一样目录一、学习编程:java入门书籍推荐:进阶书籍推荐:推荐学习平台:二、学习PS:怎样学习PS?三、学习摄影:怎样学习摄影?四、学习剪辑:怎样学习剪辑?..

    2022年7月24日
    15

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号