首页 > 其他分享 >const限定符

const限定符

时间:2024-03-02 16:11:26浏览次数:18  
标签:pi const 常量 int constexpr 限定符 指针

Const 限定符

作用

定义一个不可改变的常量,但可初始化,给其他变量赋值

const int bufSize=512;
int i=1;
const int j=i;
int k=j;

仅在文件内生效

避免重复定义,默认const变量仅在本文件内生效.
若需在多个文件间使用,可以加上extern关键字
如,在test.cpp中定义并初始化:
extern const int tmp=get();
test.h中声明(.h文件中应都是声明),指明该变量非本文件独有,将在其他文件使用
extern const int tmp;

const引用

常量引用
const引用可以将非常量绑定到常量上,但不可被非常量引用

int i=10;
const int pi=3;
const int &j=i; //合法
int &p=j;   //非法,j是常量引用
int &k=pi;  //非法
int &q=i;
q=0;    //合法
j=0;    //非法,j是常量引用

指针和const

const指针,指针的值为常量,始终指向某个地址的值;

const double pi=3.14;
double PI=3.1415926;
const double *pi_p=π
const double *PI_p=Π
*pi_p=3.1415;    //非法,指向常量pi
*PI_p=3.14;  //合法,指向变量PI

顶层const

顶层const指指针本身是常量,底层const指 指针指向的值为常量
??

constexpr和常量表达式

常量表达式指值不变且在编译时就能得到值的表达式
const int i=func(); //非法,运行时才能得到值

constexpr int i=10;
constexpr int j=i+10;
constexpr int k=func(); //func为constexpr函数时才合法

constexpr函数(c++11)是足够简单,编译时就得出结果的函数
constexpr指针初始值必须为nullptr或0,或是储存于某个固定地址的对象

const int *p=nullptr;   //指向常量的指针,底层const
constexpr int *q=nullptr;   //指向整数的常量指针,顶层const,constexpr都是顶层const
const int t=10;
constexpr const int *k=&t;  //既是顶层const也是底层const,指向整数常量的常量指针

标签:pi,const,常量,int,constexpr,限定符,指针
From: https://www.cnblogs.com/overlink/p/18048739

相关文章

  • javascript中的var,let,const区别
    const:这个最简单,只需记住是声明的常量,定义的时候必须声明const的具体值,且之后不允许改变const的值 var和let区别1、由于js引擎存在预解析,会把var变量名进行提升对于var来说是这样执行的varm;console.log(m);m=10;let不存在变量提升,会直接报错   2、var是全局......
  • [ABC303Ex] Constrained Tree Degree 题解
    AtCoder题面洛谷题面如果每个点的度数都知道了,那问题就转化成了P2290[HNOI2004]树的计数,直接求Prufer序列的个数即可,因为一个度数为\(d_i\)的点在Prufer序列中的出现次数是\(d_i-1\),所以答案是:\(\frac{(n-2)!}{\prod_{i=1}^{n}(d_i-1)!}\)。可以把\((n-2)!\)放到......
  • Large Scale Product Graph Construction for Recommendation in E-commerce论文阅读
    Abstract​ 大规模的推荐系统通常严重依赖于预先构建的产品索引来加速推荐服务,从而使等待时间较长。一个重要的索引结构是产品-产品索引,在这里可以检索给定种子产品的排名产品列表。该指数可以看作是一个加权的产品-产品图。​ 在本文中,我们提出了一种能够有效地构建这类索引产......
  • [AGC036F] Square Constraints
    [AGC036F]SquareConstraints更好的阅读体验可以看成是求值域两个半圆间的排列的个数。首先对于每个\(i\)设\(L_i,R_i\)表示\(p_i\)取值的下界和上界。如果没有小圆的限制即没有下界,问题很简单:把\(R\)从小到大排序,然后\(\prod_{i=1}^nR_i-i+1\)即为答案,原因显然,因......
  • const和char*的自由组合
    在C语言中,char*const、constchar*以及charconst*确实存在区别,虽然有时这些区别可能微妙但非常重要。让我们逐一分析:char*const(常量指针):这意味着指针本身是常量,即一旦被初始化,它的地址就不能再改变。然而,它指向的值是可以改变的。也就是说,你不能将这个指针重新指向另一......
  • 【Gorm 错误收集】Error 1215 (HY000): Cannot add foreign key constraint
    错误:Error1215(HY000):Cannotaddforeignkeyconstraint相关mysql错误:Error1215(HY000):Cannotaddforeignkeyconstraint。场景:为了方便测试人员测试产品的功能以及后续报告,PM设计了一个测试用例的功能,用于记录需要测试的产品的操作步骤。针对这个功能,我建立......
  • extern、const、register、static、inline关键字 --20240225
    extern关键字extern关键字有两种用法:1、用于声明一个全局变量或函数的外部链接性2、extern"C"是一个语言特性,用于告诉编译器按照C语言的方式对待指定的代码块,以确保与C语言兼容 用法一:用于声明一个全局变量或函数的外部链接性//file1.c#include<stdio.h>intn......
  • 「CF1575L」 Longest Array Deconstruction
    双倍经验如果本文出锅,请评论或私信提醒这个蒟蒻修改!题意题目给的很清楚了,不多说。分析看到题目,因为在dp题单里,所以一眼是个dp,我们先想朴素算法,可以发现,如果设\(f_{i,j}\)表示前\(i\)个数中删掉\(j\)个所能得到的最大结果,若\(a_i=i\),则\(f_{i,j}=f_{i-1,j}+1\);否则,可......
  • const与mutable关键字
    1异步操作,使用lambda表达式,参数采用传值方式;window直接修改传输参数的值,并打印使用正常;linux报错:errorpassingconst**asthisargumentof**discardsqualifier[-fpermissive]const关键字用于类的成员函数,成为常成员函数,即:不允许在常成员函数的内部(实现里)修改......
  • let、const、var、function所谓的”变量提升“、暂时性死区到底是什么
    今天看了大佬一个文章我用了两个月的时间才理解let-知乎(zhihu.com),文章中其实说得很清楚,还有大佬解决这个问题的整个心路历程。我这里做一个总结记录,专注于“变量提升”、暂时性死区这两个点做一个讨论。现象讨论下面这两段代码,我们都知道这段代码在控制台会打印undefined......