const 常量

const 与基本类型:

int x = 3;

变量名 存储地址 存储内容
x &x 3(随着x改变)

const int x = 3;

变量名 存储地址 存储内容
x &x 3(不随着x改变)

const 与指针类型:
const int *p 与int const *p 等价

int x =3;

const int *p = &x;

p = &y;//正确

*p = 4;//错误

变量名  存储地址 存储内容
x &x 3
p &p &x

int x =3;

int *const p = &x;

p = &y;//错误

*p = 4;//正确

变量名  存储地址 存储内容
x &x 3
p &p &x(不能改变)

const int x =3;

const int *const p = &x;

p = &y;//错误

*p = 4;//错误

变量名  存储地址 存储内容
x &x 3(不能改变)
p &p &x(不能改变)

const 与引用

int x = 3;

const int &y = x;

y = 10;//错误

x = 10;//正确

时间: 2024-08-30 04:06:48

const 常量的相关文章

const常量和#define宏常量的区别

http://blog.csdn.net/lifengguo_njupt/article/details/7992332 C++可以用const定义常量,也可以使用#define来定义常量,但是前者比后者有更多的优点: 1,const常量有数据类型,而宏常量没有数据类型,编译器可以对前者进行静态类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能产生意想不到的错误(边际效应) 2,有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试. 所以在C++中

我错误的去试图用QList里面的at方法改变const常量的值

在做曲线工厂的程序的时候,我写了一行代码是这样的: AllLines.at(cruveSecions).p1().setY(20); AllLines是QList<QLineF>类型的,cruveSections是int类型的,这里我犯了一个很低级但是很容易犯的错误,我本是图个方便,然后导致AllLines里面的数据老是更新不了,我很纳闷,最后同事通过查API给我找出了错误的原因.是这样的QList里面通过at访问出来的是个常量,里面的值不能修改成功,但是我很纳闷编译器也不报错,我想可能是se

关于C++中的Const常量

一. 为什么需要常量 (1)如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦: 1. 程序的可读性(可理解性)变差.程序员自己会忘记那些数字或字符串是什么意 思,用户则更加不知它们从何处来.表示什么. 2. 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误. 3. 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错. (2)尽量使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串. 例如: #define MAX 100 /* C 语言的宏常量 */ co

const常量类型

1.定义:const常量类型表示一个”常值变量“,其值是不能被修改的变量.即一旦变量被声明为const类型,编译器将禁止任何试图修改该变量的操作. 2.声明:const <声明数据类型> 常量或常量表达式初始化. 3.与宏定义指令#define的区别: #define只是做简单的文本替换,不会做类型检查. const声明时,编译器替换变量时会做严格的类型检查,只有与声明数据类型相同时才做替换. 4.常见的用途: 使用const限定函数的参数和返回值. 1)当函数的参数限定为const类型时,说

c++ const常量的实现机制(转载)

const关键字的基本思想就是将一个变量变成常量,试图从语言设计者的角度去分析引入该关键字的动机. 我猜测原因如下: 1)提醒程序员,某些值是常量,如PI.或该值在程序运行期间是不变的,防止程序员误修改.对于多模块开发,头文件引用复杂的系统来说,这是很重要的,如果不能在编译期阻止常量被误修改,那么这些修改将引起运行时调试困难的问题. 2)改进c语言中的#define预处理宏,1)中提到的问题使用#define宏也能够得到解决,但是#define宏作为解决方案存在一些缺陷:a)#define宏会产

const常量与宏定义区别

(1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有具体的类型,在编译阶段会执行类型检查. (3) 存储方式不同 define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存. const常量会在内存中分配(可以是堆中也可以是栈中). (4)const  可以节省空间,避免不必要的内存分配. 例如: #define PI 3.14159 //

const常量和readyonly常量区别

1.const常量为静态常量:readyonly常量为动态常量:2.const常量在编译时值被确定,在运行时值为编译时值:readyonly常量,在编译时为类型的默认值(非指定的默认值),在运行时值被确定:3.const常量无内存消耗:readyonly存常量有内存消耗:4.const常量为引用类型,值为string.Empty或null:readyonly为值类型,可以为任何值: 如: const int A=1; readyonly int B=1; -------------------

宏常量,宏替换,const常量

(1)宏常量也称为符号常量,是指用一个标识符号来表示的常量,宏常量是由宏定义编译预处理命令来定义的,宏定义的一般形式:#define 标识符 字符串 宏定义中的标识符被称为宏名,将程序中出现的宏名替换成字符串的过程称为宏替换,宏替换时是不做任何语法检查的,因此,只有在对已经被宏展开后的源程序进行编译时才会发现语法错误 (2)const常量:使用宏常量的最大问题是,宏常量没有数据类型.那么是否可以声明具有某种数据类型的常量呢?这就是const常量 const常量被编译器放在只读存储区,不允许在程序

如何正确使用const(常量),define(宏)

前言 在开发中,也许我们会经常使用到宏定义,或者用const修饰一些数据类型,经常有开发者不知道怎么正确使用,导致项目中乱用宏定义与const修饰符.本篇主要介绍在开发中怎么正确使用const与define(宏定义) 当我们想定义全局共用的一些数据时,比如通知名字,动画时长等等,我们可以用宏.常量.变量: 宏: // 注意后面不需要带符号 #define ScottDidLoginSuccess @"登陆成功" 变量: // 注意后面一定要带符号 NSString *scottDidL

const常量,常量折叠,字面常量

const int a=10: 涉及到一个叫常量折叠的概念(认为我这说得太简单或者不好理解的可以google一下它获取更多信息), 即编译器虽然会给a分配空间(如果取a的地址进行操作的时候,会强迫编译器进行内存分配), 但是在预编译阶段, 会把所有的a用10替换(这就有点像#define了), 所以虽然&a地址存放的内容改变了, 但是a依然为10. 10是字面常量 编译器实现的时候,可以优化,对int类型的字面常量,直接用立即数代替,这样10就不分配内存空间,但是对于“hello”这样的字符常量