const用法

torchsparse安装 torchsparse安装以及安装失败原因分析和解决 阅读详情
const用法: 
一、总述
修饰符const用来限定变量只能被读取,不能被修改。当定义一个常量(const)时,必须赋一个值给它。
    C++中的const默认为内部连接,也就是说,const仅在const被定义过的文件里才是可见的,而在连接时不能被其他编译单元看到。
因此,可以把const的定义放在一个头文件中,让多个cpp文件包含该头文件,而不会出现重复定义。也可以在一个文件中定义
常量const int i=10,在另一个cpp文件中使用extern int i连接该常量。
    C++编译器通常并不为const分配存储空间,相反它把这个定义保存在它的符号表里。但这不是绝对的,如取一个const变量的地址,就要进行存储空间分配。
    定义或说明一个常数组可采用如下格式:int const a[5]={1, 2, 3, 4, 5};或者const int a[5]={1, 2, 3, 4, 5}。
常量与数组的组合有什么特殊吗?我们给出下面的代码
const int size[3]={10,20,50};
int array[size[2]];


有什么问题吗?对了,编译通不过!为什么呢?
    const可以用于集合,但编译器不能把一个集合存放在它的符号表里,所以必须分配内存。在这种情况下,const意味着“不能改变的一块存储”。然而,
其值在编译时不能被使用,因为编译器在编译时不需要知道存储的内容。自然,作为数组的大小就不行了。
    下面给出几种常量初始化表达式:
int a=10;
const int b=a;//OK,可以将变通变量赋值给常量
const int * c=&a; //OK,可以将变通变量的地址赋值给常量指针(指针指向一个常量)
int * const d=&a; //OK,可以将变通变量的地址赋值给指针常量(指针本身是常量)
const int * const e=&a; // OK,可以将变通变量的地址赋值给指向常量的指针常量
const int & f=a; //OK,可以将变通变量赋值给常量引用
int g=b;//OK
int * h=c;//error,可通过h修改c指向的数据
int * i=d;//OK
int * j=e;//error,可通过j修改e指向的数据
int & k=f;//error,可通过k修改f引用的数据
const int * l=c;//OK
const int * m=d; //OK,可以将指针常量赋值给常量指针
const int * n=e; //OK
int * const o=c;//error,可通过o修改c指向的数据,不能将常量指针赋值给指针常量
int * const p=d;//OK
int * const q=e;//error,可通过q修改e指向的数据
总上所述,可得出如下赋值规则:
     int <----> const int
    int* ------> const int*
   int* <-----> int*const
   int* ------>const int*const
const int* <------ int*const
   const int* <-----> const int*const
     int*const ------> const int*const
           int& ------> const int&
<---->:代表可以相互赋值。------>:可以单向赋值


二、指针
1、 常量指针:指针指向的数据为常量,不能修改
2、 指针常量:指针本身是常量,不能将指针修改为指向别的变量
3、 指向常量的指针常量:指针指向的数据为常量,指针本身也为常量


三、引用
       引用是变量的别名,引用不占用存储空间,定义引用时必须赋初值,引用一旦初始化,它就维系在一定的目标上,再也不分开。任何对引用的赋值,
  都是对引用所维系的目标赋值,而不是将引用维系到另一个目标上。
       const可以修饰引用,例如:int a=10; const int &b=a; b是一个引用,引用的是一个常量。
       由于引用一旦初始化,就永远绑定在目标上了,所以像“int & const c;”中的const没有意义,在VC6.0下可以编译时给出warning,但可以编译通过。
  
四、函数参数和返回值
1、传值
如果参数是以值传递的,可用const限定函数参数,如:void func(const Type i).这是作了一个约定:变量初值不会被函数f( )改变。
然而,由于参数是以值传递的,因此要拷贝参数,这个约定对函数的调用者来说是隐藏的。以值的形式传递参数时,可以传递常量,
也可以传递变量,所以对函数的调用者都没有任何限制;同时还要拷贝参数,所以对传入的参数本身也没有任何影响。所以它其实是
函数创建者的工具,而不是函数调用者的工具。以值的形式作为函数的返回值时,如const Type g() 同样要建立临时变量,
此时const的意思是该临时变量不能被修改。所以表达式g()是不能成为左值的,例如:如果Type为int,那么g()++就是非法的,
g()出现在等号的左边也是非法的。这种情况下,Type t1=g()和const Type t2=g()都是合法的。
2、传指针
      如果函数的参数是传递指针,如:void func1(Type* t);
                                void func2(const Type* t);
此时就有很大的不同。只能向func1传递Type*类型的变量,而func2可以接受Type*类型的变量,也可以接受const Type*类型的变量。
        同时函数func2不会修改传递的变量,即在函数func2内,*t是不能作为左值的。而函数func1则可以修改传递过来的变量
      函数返回指针,如:Type *func1();const Type*func2();此时,func1()可以作为左值,func1()++是合法的;func2()不能作为左值,
  func2()++是不合法的。同时,在作为右值时,Type* t1=func1()是合法的,而Type*t1=func2()是不合法的。
3、传引用
  果函数的参数是传递引用,如:void func1(Type& t);void func2(const Type& t);此时就有很大的不同。只能向func1传递Type或Type&类型
变量,而func2可以接受Type、Type&类型的变量,也可以接受const Type、const Type&类型的变量。同时函数func2不会修改传递的变量,即
函数func2内,t是不能作为左值的。而函数func1则可以修改传递过来的变量
       函数返回引用,如:Type &func1();const Type&func2();此时,func1()可以作为左值,func1()=****是合法的;func2()不能作为左值,
func2()=***是不合法的。同时,在作为右值时,Type& t1=func1()是合法的,而Type&t1=func2()是不合法的。
五、类中的const
1、修饰成员变量
       类的成员变量可以用const来修饰,const成员变量必须初始化,但是初始化必须放在构造函数的初始化列表里面。
const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。
所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。如
class A
{
   const int size = 100; //错误初始化
    A():size(100)//正确初始化
{
}
}
const数据成员的初始化只能在类的构造函数的初始化表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现。如
class A
{…
   enum {size1=100, size2 = 200 };
int array1[size1];
int array2[size2];
}
枚举常量不会占用对象的存储空间,他们在编译时被全部求值。但是枚举常量的隐含数据类型是整数,其最大值有限。
2、修饰成员函数
       成员函数的参数和返回值都可以用const修饰,此时的意义和第四节中一样。
       const还可以修饰整个成员函数,此时,“const”放在函数参数右括号的右边。代表的意义是,该成员函数不会修改类的成员变量。
  因此const成员函数不能访问非const成员函数(可能修改成员变量),const成员函数可以访问所有的成员变量,从但是不能修改。
  非const成员函数可以访问const成员函数,也可以访问const成员变量,但不能修改const成员变量。
       如果想在const成员函数内修改其一成员变量,可以在类声明里用mutable修饰该成员变量。
       注意,同名的const成员函数和非const成员函数可以进行重载。
3、修饰类的实例
       可以用const修饰类对象,const类对象只能访问类的const成员函数,可以访问类的成员变量(包括非const变量),但是不能修改它们。
  普通类对象可以访问类的所有成员(const或者非const、变量或者函数)。


摘自:http://hi.baidu.com/lijilijun/item/7c6ea0edcea050d9ea34c995#
联想X3650M5服务器双模式切换实战:UEFI与Legacy BIOS如何选择? 本文深入探讨了联想X3650 M5服务器在UEFI与Legacy BIOS启动模式间的选择策略。文章从技术原理、决策矩阵、实战切换步骤及后期验证等方面,为企业IT管理员提供了基于操作系统兼容性、存储架构、安全合规与运维习惯的完整决策框架,帮助其在数据中心硬件生命周期管理中做出明智选择。 阅读详情

相关推荐

libnice和coturn这两个库有交叉实现的地方,具体有啥区别?

TurnAdmin:是一个TURN的管理工具,此工具能被用来管理用户账号的增删改查。 TurnServer:是TURN和STUN的服务器实现。 Turnutils_uclient: 模拟多个UDP、TCP、TLS或DTLS客户端 Turnutils_peer: 一个简单的无状态UDP-ECHO服务器,用作中继模式中的最终服务器 Turnutils_stunclient: 一个简单的STUN客户端例子 Turnutils_rfc5769check: 检查STUN/TURN协议实现的正确性。 我们..

Langeldep的专栏 1318

const的用法

michellechouu的专栏 468

Halcon阈值算子 -- 局部阈值之dyn_threshold

Halcon阈值算子 – dyn_threshold HALCON有很多阈值算子,接下来将一一介绍。本文先介绍dyn_threshold。 以下介绍主要参考HALCON帮助文档,并加上自己的体会。如有纰漏,欢迎留言指出 理论介绍 dyn_threshold算子的函数签名如下: dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : ) 输入参数有: OrigImage:待处理图像 ThresholdIm

m0_47015717的博客 5385

C语言中const的用法

本文介绍了const的基本用法,单独使用const的说明,const与指针的结合使用,以及const与#define的区别,并附上实例帮助读者理解

happy_child_的博客 3万+

HFSS线圈仿真避坑指南:从建模到寄生参数分析的完整流程

本文详细介绍了HFSS线圈仿真的完整流程,从精准建模到寄生参数优化,特别针对Ansys Electronics Desktop用户提供实用指南。涵盖线圈几何构建、材料属性配置、端口激励设置及寄生电阻与电感分析等关键步骤,帮助工程师避免常见错误,提升仿真精度与效率。

weixin_29209801的博客 549

管理信息系统(MIS)设计

一名读者可以借阅多本图书,而一本图书也可以被不同的读者借阅,所以读者与图书之间存在着多对多的借阅关系,读者与图书之间存在着多对多的联系,即m:n的联系。每一种图书属于一种图书类型,而一种图书类型可以包含很多本图书,因此可以得到图书类型与图书之间也存在着一种一对多的联系,即图书类型与图书是1:n的联系。系统应该实现以下功能:图书管理员可以维护图书信息,包括增加新书、修改图书信息、办理图书借阅登记、图书归还登记、过期图书处理、丢失图书处理及读者借阅证件信息的维护等;

m0_69718745的博客 2477

C++ const用法总结

`const`是constant的简写,是C++中极为常见且重要的关键字,主要功能是设置某些参数不可修改,今天对其用法进行总结记录。

a1367666195的博客 8173

UE4-(IK)实现人物脚贴合地面解决斜坡上脚无旋转无法贴合地面问题

在斜面上脚陷入模型中,需要设置旋转值对脚的骨骼进行一个旋转。 解决思路:在射线检测中可以获取到检测点的法线方向,根据法线方向来计算出脚应该向哪个方向进行适当的旋转,在斜坡上,人物脚需要旋转的轴为x轴和y轴以便来贴合地面,z轴方向的旋转是不需要进行修改的。 如图所示,我们需要求得水平面与斜坡的夹角用来得出人物在x轴上的脚旋转量,在蓝图中提供反正切函数,反正切 = 锐角的邻边/对边 所以 反正切值(脚x轴值(roll)) = 法线Y轴值/法线Z轴 值。 现在将上图的人物想象成面向屏幕,脚需...

Stone的博客 3317

C++中const的用法

这些是类中的数据变量,使用const关键字定义。它们在声明期间未初始化。它们的初始化在构造函数中完成。

Menior_的博客 1173

硅纪元应用测评 | AI搜索引擎大比拼:360AI搜索、秘塔搜索、GenSpark AI和天工AI对比评测

搜索引擎输出的每个段落都有对应的出处,如果有错误,也是信息源的问题,从普通用户的角度来看,这与AI搜索的产品关系不大,能让用户对AI搜索的服务和得到的信息有一个隔离。同时,提供更多的定制选项,允许用户根据自己的偏好调整搜索结果的权重和排序,将使得搜索体验更加个性化和满足用户的具体需求。此外,大部分搜索工具还提供了一个无广告的搜索环境(360AI搜索部分内容会有广告),极大地提升了用户的搜索体验。AI搜索的本质依然是搜索,但它通过AI的逻辑分析和语言重新组织,使用户能够快速得到想要的信息。

guijiyuantech的博客 2013

高匿反爬实战:Python打造无痕爬虫,规避风控系统追踪

网络层匿踪:核心是使用住宅IP代理池,按真实用户IP画像匹配,控制请求频率;协议层匿踪:动态生成请求头(每次都不同),参数添加随机噪声,避免规律化;行为层匿踪:模拟人类的非规律行为(贝塞尔轨迹、随机停顿、非精准点击);设备层匿踪:伪造Canvas/WebGL指纹,禁用webdriver标识,每次请求更换指纹;核心原则:无痕爬虫的本质是“无限接近真实用户”,所有维度都要消除爬虫特征,而非单一维度伪装。打造真正的无痕爬虫需要全维度的匿踪策略,单一维度的伪装极易被高级风控系统识别。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2642

c++中const的用法

const在c语言和c++的使用是不同的 在c语言中,const修饰的变量叫常变量,在编译阶段编译器会检查常变量有没有做左值,剩下的和普通变量相同,具体用法可参考小编的另一篇博客 — —const的用法。 在c++中,const用法有以下几点需要注意: 1、const修饰的变量叫常量,定义时一定要初始化,因为在编译阶段编译器会把用到常量的地方替换成常量初始化的值,在...

IT_happy_的博客 4575

使用 MATLAB/Simulink + Simscape Electrical 来构建一个CCHP微电网与新能源协同运行的模型

随着能源需求的增长和对环境保护要求的提高,冷热电联供(Combined Cooling, Heating and Power, CCHP)系统作为一种高效的分布式能源解决方案,越来越受到关注。CCHP系统通过利用一次能源同时产生电力、制冷和供热,实现了能源的梯级利用,提高了能源使用效率。结合太阳能、风能等可再生能源,可以进一步增强系统的灵活性和环保性。本文将详细介绍如何使用来构建一个CCHP微电网与新能源协同运行的模型,并通过仿真分析其性能表现。本文介绍了如何使用构建一个。

xiaoheshang_123的博客 141

Const用法详解

Const用法详解 一、const与#define的比较 C++语言可以用const来定义常量,也可以用#define来定义常量。但是前者比后者具有更多的优点: 1、  const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行静态类型安全检查;而对后者只能进行

天道酬勤 1559

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++中const用法总结

C++中const的用法 1. 使用const修饰变量 1.1. 使用const 修饰普通的变量 const int a=10; 表示a这个int型变量将不可更改。 如:a=3;这样将会报错。 1.2. 使用const修饰指针变量 const修饰指针变量有3种情况: const 修饰指针指向的内容,则内容为不可变量。 const 修饰指针,则指针为不可变量。 const 修饰指针和指针指向的内...

k5722166的博客 7860

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

const的多种用法

const的多种用法 在C++中有多种方法使用const关键字。所有的用法都是相关的,但存在微妙差别。灵活的const 是相当不错的面试问题!下面将讲述最常见的用法。 const定义常量 如果你已经认为关键字const与常量有一定的关系,就正确地揭示了它的一种用法。在C语言中,程序员经常使用预处理器的 #define机制声明一个名称,其值在程序执行时不会变化,例如版本号。在C++中,鼓励...

wrdasj的博客 419

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Dan_Saks总结的const所有用法

Dan_Saks总结的const所有用法!

hnzgemail的博客 846

C语言const的用法

1、const的用法 const是constant的缩写,意思是“恒定不变的”,它是定义只读变量的关键字。用const定义只读变量的方法很简单,就在定义变量时前面加const即可,如: const double pi = 3.1415926; 用const定义的变量的值是不允许改变的,不允许给它重新赋值,即使是赋相同的值也不可以。所以说它定义的是只读变量。这也就意味着必须在定义的时候就给它赋...

C语言技术网-码农有道 1万+

C语言中const用法

const;c语言;

2401_87087273的博客 1705

const用法总结

https://www.cnblogs.com/soft4/p/5078726.html

Fishfishfishfishcat 257

C++ const用法

C++ const用法 尽可能使用const   C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。 1.const 修饰成员变量 #include&lt;iostream&gt; using namespace std; int main() { ...

qq_36310758的博客 1465

CONST的用法

CONST的用法

RaymondAmos的技术专栏 489

const用法大全

const用法主要分为四类: 目录: 1. const的常规用法; 2. const用于指针; 3. const用于引用; 4. const_cast的用法 1. const的常规用法; 用const关键字将变量声明为常量,既在整个程序的运行过程中都无法修改的。 const double pi=3.1415926 2. const用于指针; 指针也是变量,因此也可以将const用于指针。但指针是特殊的变量,包含内存地址,还可以用于修改内存中的数据块。因此,const指针有如下三种: 指针包含的地址是常量

Parker盘的博客 1063

CONST的几种用法总结

关于C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,参考了康建东兄的const使用详解一文,对其中进行了一些补充,写下了本文。 1. const常量,如const int max = 100; 优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意

wellph的专栏 1019

C++系列-const所有用法总结

C++系列-const所有用法总结

weixin_48668114的博客 1327

C语言中static、const、typedef的用法

一、static关键字 1、定义: 实际开发中,我们通常将不需要被其他模块调用的全局变量或函数用 static 关键字来修饰,static 能够将全局变量和函数的作用域限制在当前文件中,在其他文件中无效。下面我们通过一个实例来演示。 module.c 源码: main.c 源码: 运行结果: http://c.biancheng.net n = 100 2、static 局部变量 static 除了可以修饰全局...

一只特立独行的zhu.. 1232
上一篇: 在头.h写函数实现体和在cpp中写实现体的区别
下一篇: SVN使用教程
CHF_VIP
博客等级 码龄14年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值