constexpr与指针

Posted 锅里煮水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了constexpr与指针相关的知识,希望对你有一定的参考价值。

一、

常量表达式:是指值不会改变并且在编译过程就能得到的计算结果的表达式。

定义常量表达式变量:

constexpr 变量类型 变量名;

例如:

constexpr int mf=20;/////20是常量表达式

constexpr int limit=mf+1;/////mf+1是常量表达式

constexpr int sz=size();//////错误:size()只有到运行时才能获取到

二、

     指针和引用都能定义为constexpr,但是他们的初始值却受到严格限制。一个constexpr指针的初始值必须是nullptr或者0,或者是存储于某个固定地址中的对象。

     const int *p=nullptr;////p是一个指向整型常量的指针

     constexpr int *q=nullptr;/////q是一个整数的常量指针

注意:p和q相差甚远,p是一个指向常量的指针,q是一个常量指针,其中关键在于constexpr把它所定义的对象置为了顶层const。

补充:顶层const指定义了一个常量指针,底层const指定义了一个指向常量的指针。

以上是关于constexpr与指针的主要内容,如果未能解决你的问题,请参考以下文章

将函数指针分配给 constexpr 结构中的 typedef 函数的正确 C++ 方法是啥?

C++中 const和constexpr的区别

C++中 const和constexpr的区别

constexpr 和使用重新解释强制转换的静态 const void 指针的初始化,哪个编译器是正确的?

我可以将 C++17 无捕获 lambda constexpr 转换运算符的结果用作函数指针模板非类型参数吗?

C++11之常量表达式(const与constexpr的区别)