首页 > 其他分享 ><四>1:全面掌握Const的用法

<四>1:全面掌握Const的用法

时间:2022-10-28 11:33:05浏览次数:57  
标签:初始化 const 掌握 int C++ 用法 300 Const 100

const怎么理解?
const修饰的变量不能够在作为左值!!初始化完成后,值不能被修改!!

C 和C++中const 的区别?

在C程序中
test.c

const int a; 只定义,不做初始化(C中允许),如果不做初始化,那么后面就不能再赋值了.
在C语言中const修饰的量,可以不用初始化,这个不叫常量,叫做常变量,本质还是变量,只是
不能作为左值被修改值了

例如1: 在.c的程序中
const int a=100;
int array[a]={}; 是不可以的, 因为a不是常量,他还是个变量

例如2: 在.c的程序中
const int a=100;
int *p=(int )&a;
p=300;
printf("%d %d %d \n",a,
p,
(&a));//结果都为300
a只是在语法上保证了不能作为左值被修改,但是他内存中的值是可以被修改的,例如通过指针.

在C++程序中
test02.cpp
const int b; 编译报错,在C++中const修改的就叫常量,定义的时候必须被初始化,由于是常量了
所以可以用来定义数组的长度,如下代码
例如3: C++代码
const int b=100;
int array[b]={};

例如4: C++代码
const int b=100;
int *p =(int )(&b);
p = 300;
print("%d %d %d",b,
p,
(&b));//打印结果是 100,300,100
这个结果为什么会和在C语言环境下的结果不一样?
是因为C和C++编译器对待const的编译处理方式不一样,在C语言中,const修饰的仍然被当做变量来编译生成指令的
C++中.出现的被const修饰的常量名,在编译的过程中都会被常量的初始化给替换掉的

所以上面 print("%d %d %d",b,p,(&b)); b 被替换成100, *(&b)会被编译器优化掉 也是100
同时b在内存中的值被修改了,改成了300

注意
在C++中const 修饰同时被初始化的值是一个立即数,那么他就是个常量,如下
const int a = 100;
int *p = (int )(&a);
p=300;
print("%d %d %d",a,
p,
(&a));//打印结果是 100,300,100
编译过程中 a都会被替换成被初始化的立即数100

但是如果用一个变量来初始化const修饰的量,就不再是常量了,会退化成常变量,本质上变成变量了 如下
int b=1;
const int a=b;
int arr[a]={};//这一行编译报错,因为a已经不再是常量了
int *p = (int )(&a);
p=300;
print("%d %d %d",a,
p,
(&a));//打印结果是 300,300,300,由于a已经不是常量了被退化成变量,这里就不再会被编译替换了,打印的都是内存中的值

标签:初始化,const,掌握,int,C++,用法,300,Const,100
From: https://www.cnblogs.com/erichome/p/16834774.html

相关文章

  • 动态数组vector的相关用法
    1)头文件#include<vector>2)创建一维vector对象,vector<int>vec;3)尾部插入数字:vec.push_back(a);4)尾部元素弹出:vec.pop_back();相当于删除尾部元素。5)使用下标访问......
  • Spark SQL概述、函数用法
    SparkSQL  底层还是基于RDD的,常用的语言DSL底层架构    在idea中的操作引入pom依赖<dependency><groupId>org.apache.spark</gr......
  • ansible-playbook 用法
     catinstall_zabbix_3.yaml----name:#名称hosts:new#hosts为文件名,new为hosts文件里得[new]tasks:#任务-name:shell:|rpm-ivhhtt......
  • C++ Const Pointer
    Compaction*constcompaction;//即该指针声明后不能再指向其他地址这样记:const后边的内容为“常量”。constintptr;//ptr为常量,初始化后不可更改int*constpt......
  • Python之JSON用法解析
    前景Python编写HDFS服务安装的过程中,需要将构建好的JSON对象输出到文件,采用那种方式更便捷方案1open函数defwriteExecCmdCheckActionsFile(self,out_res,che......
  • mysql group by having用法
    mysql中groupby里面的问题GROUPBYdept,name的意思,就是先按dqpt分组,如果出现dept相同的,再按name分组,也就是说除非出现dept和name都相同的记录才会合为一组,否则的话是不会合......
  • c++ 中 const, constexpr 的使用
    目录参数例外返回值例外constthis和成员const_cast与constexpr的关系函数变量构造函数C++与C语言相比有着更强的类型检查,包括四种cast,左值右值之分,reference,以及......
  • PHP :array_diff 用法(php计算数组的差集)
    说多了都是废话,直接上图:结果输出:由上图的结果可以看出:array_diff($a,$b)的结果只输出了5与8,则可以看出,输出的是$a的差集。array_diff($b,$a)......
  • Windows10 和 WinServer2012 Telnet配置和用法详解
     Windows10 和 WinServer2012 Telnet配置和用法详解 Telnet协议是TCP/IP协议族的其中之一,是Internet远程登录服务的标准协议和主要方式,常用于网页服务器的远程控制,可......
  • .Net Core WebApi AutoFac用法
    1.安装Autofac.Extensions.DependencyInjection管理包UI层安装 2.在Program里面配置服务提供工厂  3.在Startup里面添加一个配置容器的方法使用基于扫描程序集......