const int a = 5 + 4; constexpr int a = 5 + 4; 它们是完全等价的,都可以在程序的编译阶段计算出结果。但在某些场景中,必须明确使用 constexpr,例如: #include <iostream> #include <array> using namespace std; constexpr int sqr1(int arg){ return arg*ar
constexpr int add(int x, int y) { return x + y; } 2.2.2 模板参数 字面类型常量可以作为模板的参数,用于在编译时实例化模板。例如: 代码语言:cpp 代码运行次数:0 运行 AI代码解释 template <int N> struct Array { int data[N]; }; 2.2.3 函数参数 字面类型常量可以作为函数的参数,用于传递编译...
const int a = 5 + 4;constexpr int a = 5 + 4; 1. 它们是完全等价的,都可以在程序的编译阶段计算出结果。但在某些场景中,必须明确使用 constexpr,例如: #include <iostream>#include <array>using namespace std;constexpr int sqr1(int arg){ return arg*arg;}const int sqr2(int arg){ return ...
const int *p = nullptr;//p是一个指向整型常量的指针 constexpr int *q = nullptr;//q是一个指向整型的常量指针,在这一点上类似于int *const p 指针p和q的类型相差甚远,p是一个指向常量的指针,而q是一个常量指针,其中的关键在于constexpr把它所定义的对象置为了顶层const。 与const指针类似,constexpr指...
constexpr int test() { return 1 + 1; } 修饰构造函数 constexpr还可以用于修饰自定义类型,不过有一个前提条件,就是该自定义类型具有constexpr修饰的构造函数,并且该构造函数不能有具体实现,否则会编译报错 class Student { public: constexpr Student(const char* name, int age) : name_(name), age_(ag...
// 正确,2+2是常量表达式,n将会在编译器进行计算contexprintn =2+2;// 正确,n是一个常量表达式intarr[n] = {11,22,33,44};// 33cout << arr[2] << endl; 修饰普通函数 constexpr还可以用于修饰函数的返回值,在C++11中被constexpr修饰的函数只能是非void类型的函数,而且必须非常简短,通常只有一句retu...
1、constexpr是constant expression的缩写。顾名思义“常量 表达式” 2、何为常量表达式(constant expression):是指由编译器求值的表达式。 在这里在解释一下编译器求值概念:编译系统由预处理器、编译器、汇编器、连接器四部分组成 一个源文件到一个可执行文件要经过这四部分,所谓的编译器求值指的就是第二部分编译...
{returnN; }// Recursive constexpr functionconstexprintfac(intn){returnn ==1?1: n * fac(n -1); }// User-defined typeclassFoo{public:constexprexplicitFoo(inti): _i(i){}constexprintGetValue()const{return_i; }private:int_i; };intmain(){// foo is const:constexprFoofoo(5);//...
// 第一种情况:指针常量inta=2;// const作用:使其无法通过指针来修改变量constint*p=&a;// 错误,表达式必须是可修改的左值*p=3;// 正确a=4;// 4cout<<*p<<endl;// 同样地,有人习惯这种写法,作用是一样的,看个人喜好即可intconst*p2=&a;// 第二种情况:常量指针inta=2;// const作用:使指针p无法...
constexpr intAdd(constint a,constint b){returna+b;}intmain(){constint val=Add(1,2);return0;} 汇编如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 main:push rbp mov rbp,rsp movDWORDPTR[rbp-4],3mov eax,0pop rbp ret ...