const & constexpr

首先用几个简单的例子来说明一下两者的基本使用,就可以看出来相同点和不同点了。

const主要在于:只读

constexpr顾名思义常量表达式:常量

1)只读 | 常量

cpp 复制代码
#include <iostream>
#include <array>

using namespace std;

void dis_1(const int x) {
    array<int, x> myarr{1, 2, 3, 4, 5}; // 错误,x是只读的变量(本质仍未变量)
    cout << myarr[1] << endl;
}

void dis_2() {
    const int x = 5;                    // 正确,只读变量的同时,还是一个值为5的常量
    array<int, x> myarr{1, 2, 3, 4, 5};
    cout << myarr[1] << endl;
}

int main()
{
    dis_1(5);
    dis_2();
}

2)"只读" 与 "不允许被修改" 的区别:

cpp 复制代码
#include <iostream>

using namespace std;

int main()
{
    int a = 10;
    const int& con_b = a;
    cout << con_b << endl;    // 10
    a = 20;
    cout << con_b << endl;    // 20
}

3)const & constexpr区别:

cpp 复制代码
#include <iostream>
#include <array>

using namespace std;

constexpr int sqr1(int arg) {
    return arg*arg;
}

const int sqr2(int arg) {   // warning: 'const' type qualifier on return type has no effect
    return arg*arg;
}

int main()
{
    array<int, sqr1(10)> mylist1;   // 可以,因为sqrt1是constexpr函数
    array<int, sqr2(10)> mylist2;   // 不可以,因为sqrt1不是constexpr函数
    return 0;
}

总的来说在 C++ 11 标准中,const 用于为修饰的变量添加"只读"属性;而 **constexpr**关键字则用于指明其后是一个常量(或者常量表达式),编译器在编译程序时可以顺带将其结果计算出来,而无需等到程序运行阶段,这样的优化极大地提高了程序的执行效率。

相关推荐
王老师青少年编程5 小时前
csp信奥赛C++高频考点专项训练之字符串 --【子串查找】:[NOIP 2009 提高组] 潜伏者
c++·字符串·csp·高频考点·信奥赛·子串查找·潜伏者
初願致夕霞5 小时前
基于系统调用的Linux网络编程——UDP与TCP
linux·网络·c++·tcp/ip·udp
小小de风呀6 小时前
de风——【从零开始学C++】(五):内存管理
开发语言·c++
CHANG_THE_WORLD8 小时前
C语言中的 %*s 和 %.*s 和C++的字符串格式化输出
c语言·c++·c#
螺丝钉的扭矩一瞬间产生高能蛋白9 小时前
QT的C++接口基础用法
c++·qt·嵌入式软件·嵌入式linux·linux应用
智者知已应修善业9 小时前
【51单片机模拟生日蜡烛】2023-10-10
c++·经验分享·笔记·算法·51单片机
智者知已应修善业9 小时前
【51单片机如何让LED灯从一亮到八,再从八亮到一】2023-10-13
c++·经验分享·笔记·算法·51单片机
qeen879 小时前
【数据结构】二叉树相关经典函数C语言实现
c语言·数据结构·c++·笔记·学习·算法·二叉树
良木生香10 小时前
【C++初阶】STL——List从入门到应用完全指南(1)
开发语言·数据结构·c++·程序人生·算法·蓝桥杯·学习方法