网站首页 > 文章精选 正文
const关键字出现在不少编程语言中,它是防御性描述,提醒编译器注意相应的变量或常量不能被修改。当然,编译器无法检测hack刻意躲过检查的行为。
不同语言的const
- C/ObjC语言的const修饰的不是常规的”常量”,而是”不可修改”的变量。但实际上,和常量效果一样。本质在于C语言根本没有所谓常量的概念,用const来假装有常量。
- C++ const真的是常量,比C语言的使用更广泛,尤其是类成员函数用到const引用,iostream就包含很多const修饰符。C++17引入了constexpr关键字,可修饰新的类型,如函数、类等,使得常量控制更强大。
- constexpr int get_size() { return 3; }
- char arr[get_size()]; // 合法!
- 尽管如此,constexpr不一定保证编译期完成,C++20又引入了consteval确保一定是编译期完成。
- Java用final代表常量,有意思的是const属于Java的预留关键字,但不能用。
- C#除了有const,受局限于声明时就必须初始化。readonly变量可以推迟到构造函数初始化。
- Python没有const关键字,按照约定常量用大写字母,实际上语法上没有限定不能被修改,可能源于Python设计对常量的期待很低。
- Go支持单个或多个标识符的const初始化,多个标识符初始化需要用括号包起来。
- Rust支持const常量,属于编译期常量,let虽然也代表常量,属于运行期常量,加mut代表运行期变量.
- JS在ES6之后引入了const关键字代表常量,let声明的变量属于变量。var属于deprecated的函数内变量。
- Swift/仓颉 没有const关键字, 用let代表常量,var代表变量。
- VB用Const代表常量。
const的指针还是常量?
有指针的编程语言就是复杂,const和指针的组合让大家摸不到头脑。究竟是变量是const还是指针const?一个比较有意思的原则是,”从右向左读”的解析方法很实用。
- C语言:”const int * const p”解读方式是”从右向左”读的方法
- const int * p是”p” “指向” “整形” “常量”.
- const int * const p是”p” “常” “指向” “整形” “常量”.
const和代码大小
一般而言相比没有const修饰,加const修饰后不会增加代码大小,可能减小代码大小。编译器利用const修饰优化对应的变量,如果可能用常数代替或者引用已有变量而不拷贝新的变量。
若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
猜你喜欢
- 2025-03-17 C++|剖析函数参数为const引用时,要求其指向一个生成的临时变量
- 2025-03-17 c语言那些事儿:指针数组和数组指针傻傻分不清?
- 2025-03-17 C语言指针与函数(c语言指针函数的用法)
- 2025-03-17 C语言通用工具库的4个函数(c语言运行工具)
- 2025-03-17 C++ 指针总结(c++ 指针操作)
- 2025-03-17 C语言100题集合023-输入月份号并输出英文月份名
- 2025-03-17 TypeScript 使用let和const声明变量
- 2025-03-17 C语言之指针与数组(c语言中指针数组的使用方法)
- 2025-03-17 C/C++的const常量总结(c++ const详解)
- 2025-03-17 const关键字到底该什么用?(java中const关键字的作用)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)