一、constint和int的区别
1、返回值
constint&是返回这个数值的一个常量的引用。
而in感集创别免艺衣直自够福t是返回这个数值的一个拷贝地突宣已同顶界九妈。
int是进行拷贝构造,而constint&是返回的引用。拷贝构造更消耗时间,与此同时还用析构函数。因为产生了一个拷贝,你就可以轻易地修改拷贝的内容。
2、取指针
constint类型一旦定义以后就不能修改,int类型是随时可以修改的。
在取指针方面,const有略复杂的东西,但是常规的、合理的操作不应该涉及到,因为constint依是用来保存一些全局常量的,这些常量在编译期可以改,在运行此整还富负愿英原安里江期不能改。
听起来这像宏,其实这确实就是用来取代宏的:#definePI3.14constf限帮loatPi=3.14;如果你的代码里用到了100次PI(宏),你的代码中会保存军100个3.14这个常数。
鉴于使用常数进行运算的机器代码很多时候会比使级穿家广提外确航用变量来的长,如果你换用100次P室和次感i(constfloat),破为找内程序编译后的机器码里就不需要出现100次常量3.14,只要在需要的时候引用存有3.14的常纸末损参上容钢事武许量就行了。
特别在复杂的运算里,3.14这个常量(其实是无法修改的变量)会被一宣限跑机而易弱直装载在寄存器里带来晶些搞征周银刘区岩一些性能提升。
3、内容
constint*p;//p可变,p指向的内容不可变,intconst*p;//p可变,p指向的内容不可变。 int*constp;//p不可变,p指向的内容可变 constint*constp;//p和p指银率属革重向的内容都不可变。
二、const的作用贵:
1、可以定义const常量,具有不可变性。
例如:constintMax=100;Max++会产生错误;
2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。
例如:voidf(constinti){...齐贵准亲使......}编译器就会知道i是一个常量,不允许修改;
3、可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。同宏定义一样,可以做到不变则已王措紧甲历分,一变都变!
如1中,如果想修改Max的内容,只需要它修改成:constintMax=youwant;即可!
4、可以保家执心护被修饰的东西,防止意外的修改,增强程序的健壮性。还是上面的例子,如果在函数体内修改了i,编译器就会报错;
例如:voidf(constinti){i=10;//error!}
5、可以节省空间,避免不必要的内存分配。
扩展资料
当const修饰的是指针类型,那么指针的值就不能改变,即不能指向其他地址,但是可以通过指针修改其指向地址里面的值。
当const修饰时指针指向的类型时候,那么指针被指向其他地址,但是不能通过指针修改指针里面的值。
1)先从constinti说起。
使用const修饰的i我们称之为符号常量。即,i不能在其他地方被重新赋值了。注意:constinti与intconsti是等价的,相同的,即const与int的位置无所谓。
2)constint*p
看例子:
inti1=30;
inti2=40;
constint*p=&i1;
p=&i2; //此处,p可以在任何时候重新赋值一个新的内存地址。
i2=80; //这里能用*p=80来代替吗?答案是不能
printf("%d",*p); //输出80
分析:p的值是可以被修改的,即它可以重新指向另一个地址。但是不能通过*p来修改i2的值。
首先,const修饰的是整个*p(注意,是*p而不是p),所以*p是常量,是不能被赋值的。虽然p所指的i2是变量而不是常量;
其次,p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。
参考资料:百度百科——const