C/C++编程笔记:const 变量详解!一文了解具体用法

2022-12-21 0 949

C/C++编程笔记:const 变量详解!一文了解具体用法

1、C中的const

1、局部const表达式存放在栈区中,会初始化(换句话说能透过门牌号间接地修正表达式的值)。控制代码如下表所示:

C/C++编程笔记:const 变量详解!一文了解具体用法

运转结论:

C/C++编程笔记:const 变量详解!一文了解具体用法

2、全局const表达式存放在黎贞统计数据段(无法透过门牌号修正,会出现写入严重错误), 预设为内部联编,能给其它示例采用(须要用externURL润色)

C/C++编程笔记:const 变量详解!一文了解具体用法

运转结论:

C/C++编程笔记:const 变量详解!一文了解具体用法

虽然分文档撰写,不太好呈现出,因此在这儿不为我们提供更多c词汇全局const表达式预设为内部联编的事例。假如对听众有兴趣,可自行尝试。具体内容步骤如下表所示,可新建一个示例,并且提供更多a表达式的声明,如:extern const int a。

2、C++中的const

1、普通局部const表达式

对于基本类型,以符号表中的统计数据进行初始化的普通局部const表达式,此时不会初始化,将其放入符号表中,假如对它取门牌号,则会开辟一个新的空间,换句话说会创建一个临时表达式,假如透过门牌号间接地进行修正值不会影响到其本身。控制代码如下表所示:

C/C++编程笔记:const 变量详解!一文了解具体用法

运转结论:

C/C++编程笔记:const 变量详解!一文了解具体用法

在这里解释一下上述代码:第二行代码,采用了const(expression),显示转换,这是虽然c++比c类型转换更严格。因此须要将 const int * 转换为 int * 才能够进行赋值,并且第二行代码将被隐式转换为如下表所示代码:

int temp=a;

int *ptr=&temp;

//因此对指针 ptr 指向的内存空间进行操作,并不会影响到 a。

对于基本类型,用表达式初始化的普通局部const表达式,此时会在栈区开辟内存,能透过门牌号间接地修正值。控制代码如下表所示:

C/C++编程笔记:const 变量详解!一文了解具体用法

运转结论:

C/C++编程笔记:const 变量详解!一文了解具体用法

(3)对于自定义类型,都会初始化,能透过门牌号间接地修正值

C/C++编程笔记:const 变量详解!一文了解具体用法

运转结论:

C/C++编程笔记:const 变量详解!一文了解具体用法

2、普通全局const表达式

与局部const表达式基本相同,只是内存开辟在全局/堆区,对于c++而言,全局const表达式预设为内部联编,能在定义时加externURL声明为内部联编。 虽然分文档撰写不太好展示,请听众自行尝试。

C/C++编程笔记:const 变量详解!一文了解具体用法

3、const 成员表达式/成员函数

const成员表达式只能被const成员函数访问

const成员函数,能够访问所有成员表达式,但是在函数体内无法直接修正表达式的值(包括普通成员表达式),假如须要在函数体内修正普通成员表达式的值,须要在表达式定义的前面添加mutableURL,或者透过门牌号间接地修正。注意:const成员函数只能被该类的const对象访问。控制代码如下表所示:

C/C++编程笔记:const 变量详解!一文了解具体用法

运转结论:

C/C++编程笔记:const 变量详解!一文了解具体用法

3、C/C++中const异同总结

c词汇全局const会被存储到黎贞统计数据段。c++中全局const当声明extern或者对表达式取门牌号时,编译器会分配存储门牌号,表达式存储在黎贞统计数据段。两个都受到了黎贞统计数据段的保护,不可修正。

c词汇中局部const存储在栈区,只是无法透过表达式直接修正const黎贞表达式的值,但是能跳过编译器的检查,透过指针间接地修正const值。

c++中对于局部的const表达式要区别对待:

(1)对于基础统计数据类型,也就是const int a = 10这种,编译器会把它放到符号表中,不初始化,当对其取门牌号时,会初始化。

a在符号表中,当我们对a取门牌号,这个时候为a分配了新的空间,*p操作的是分配的空间,而a是从符号表获得的值。

(2)对于基础统计数据类型,假如用一个表达式初始化const表达式,假如const int a = b,那么也是会给a初始化。

(3)对于自定统计数据类型,比如类对象,也会初始化。

c中const预设为内部连接,c++中const预设为内部连接.当c词汇两个文档中都有const int a的时候,编译器会报重定义的严重错误。而在c++中,则不会,因为c++中的const预设是内部连接的。假如想让c++中的const具有内部连接,必须显示声明为: extern const int a = 10;

希望对你有帮助!

自学C/C++程式设计难度很大,假如你想更快提升自己的程式设计能力和撰写项目的水平,欢迎一起共同成长!

C词汇C++程式设计学习交流圈子,关注+私信【C/C++程式设计】微信公众号:C词汇程式设计学习基地

有一些源码和资料分享,欢迎转行也学习程式设计的伙伴,和我们一起交流成长会比自己琢磨更快哦!

C/C++编程笔记:const 变量详解!一文了解具体用法
C/C++编程笔记:const 变量详解!一文了解具体用法

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务