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 小时前
c++ 学习笔记之 chrono库
c++·笔记·学习
星火开发设计5 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
月挽清风5 小时前
代码随想录第七天:
数据结构·c++·算法
点云SLAM6 小时前
C++内存泄漏检测之Windows 专用工具(CRT Debug、Dr.Memory)和Linux 专业工具(ASan 、heaptrack)
linux·c++·windows·asan·dr.memory·c++内存泄漏检测·c++内存管理
浅念-7 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
无限进步_9 小时前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬9 小时前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
oioihoii10 小时前
回归测试:软件演进中的质量守护神与实践全指南
c++
十五年专注C++开发11 小时前
CMake基础: 在release模式下生成调试信息的方法
linux·c++·windows·cmake·跨平台构建
点云SLAM11 小时前
C++(C++17/20)最佳工厂写法和SLAM应用综合示例
开发语言·c++·设计模式·c++实战·注册工厂模式·c++大工程系统