首页 > 其他分享 >指针与constexpr

指针与constexpr

时间:2023-05-17 16:36:52浏览次数:30  
标签:const 定义 int 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指针;需要注意的是constexpr只对指针有效,与指针所指对象无关,这句话的意思是constexpr修饰的指针是一个指向变量的常对象,指针的方向不能改变,指向的对象可以改变

值得知道的一点是:constexpr指针时编译期常量,其指向定义时的初始值确定后不能发生改变,所以我们需要定义所有函数体之外的固定位置不变的,用来初始化constexpr指针,可以时全局变量,全局常量,静态变量等等

我们接下来可以用代码来表示:

#include <iostream>

using namespace std;

 

//指针与constexpr

int i = 10;//全局变量

constexpr int j = 10;//全局常量

int main01()

{

//int i=1;//无固定地址

constexpr int* p = &i;//初始化时需要取地址

i = 3;

//只要地址不变对指针的值就无影响

cout << "p指向的对象的值:" << *p << endl

<< "p指向的地址:" << p << endl;

//================

constexpr  const int *q = &j;

cout << *q << endl;

static char x = 'X';//局部静态变量

constexpr char *m = &x;

cout << *m << endl;

system("pause");

return 0;

}

 

 

from:https://blog.csdn.net/m0_46434080/article/details/109138348

           https://blog.csdn.net/aa6272737/article/details/125038354

 

https://www.cnblogs.com/cynthia-dcg/p/6057227.html

标签:const,定义,int,constexpr,指针,常量
From: https://www.cnblogs.com/im18620660608/p/17409195.html

相关文章

  • C++ 智能指针
    在介绍智能指针之前,先来看原始指针的一些不便之处:它的声明不能指示所指到底是单个对象还是数组。它的声明没有告诉你用完后是否应该销毁它,即指针是否拥有所指之物。如果你决定你应该销毁指针所指对象,没人告诉你该用delete还是其他析构机制(比如将指针传给专门的销毁函数)......
  • 10.二级指针,指针的动态存储,常量与指针的结合、指针与数组的结合及指针函数
    二级指针的语法指针的动态存储常量指针和指针常量指针数组和数组指针指针和函数的结合二级指针的语法语法:数据类型**变量名 数据类型*变量名[常量]inta=10;int*p=&a;int**dp=&p;cout<<p<<""<<*dp<<""<<**dp;输出结果......
  • c++ - 为什么要在构造函数上使用 constexpr?
    我知道 constexpr 允许您在编译时将对象用作常量,但是什么时候这会有益呢?我试图更好地理解关键字,但我找不到一个很好的例子来解释为什么需要它的构造函数。下面的两个例子都有效,那么为什么要将constexpr放在构造函数上呢?在构造函数上使用constexpr:#include<iostream>us......
  • (双指针)剑指 Offer 22. 链表中倒数第k个节点
    题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。    classSolution......
  • 记一次线上空指针问题排查
    前言今天收到一封告警邮件,内容如下com.example.dubbo.filter.ExceptionFilter#invoke[traceId][DubboServerHandler-thread-19][DUBBO]Gotuncheckedandundeclaredexceptionwhichcalledbyip.service:com.example.TestService,method:testMethod,exception:ja......
  • opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,
    opencv表识别工业表智能识别数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,刻度分割,刻度拉直识别YYID:37400640060136589......
  • 智能指针与RAII
    对象生存期和资源管理(RAII)RAII:ResourceAcquisitionIsInitialization,资源获取即初始化。是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII的做法是使用一个对象,在其构造时获取资源,在对象生......
  • C基础笔记(指针)
    指针&变量   取地址的符号 *:地址得到地址里的东西指针变量通常情况下将指针指向地址赋为NULL被赋为NULL值的指针被称为空指针指针是一个用数值表示的地址,可以对指针进行四种算术运算:++、--、+、-指针可以用关系运算符进行比较,如==、<和>C......
  • 指针进阶(3)————玩转指针
    指针进阶内容不多,但面面俱到,都是精华1.回调函数:2.详解qsort函数参数:3.模拟实现qsort函数回调函数就是,把一个函数的地址,放在函数指针中,然后将该指针作为一个参数,传到另一个函数中,在这个函数内部使用了外部写好的一个函数.举一个例子,看完你一定明白了例子:voidmenu(void){ print......
  • 2、c++中的指针参数传递和引用参数传递
    指针参数传递本质上是值传递。值传递的过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开空间用以存放由主调函数传递的实际参数,从而形成了实参值得一个副本。而值传递的特点是被调函对形参的任何修改都不会影响实参值。(如果想通过指针参数来修改主调函数的相关变量或......