C++基础----const关键字相关

const在c++中

在C++中,const限定符就是把一个对象转换成一个常量。但是,常量的定义就是不能被修改,所以在c++的源文件中,const修饰的符号必须被初始化。

const int a=10;

此段程序在C++中是合法的。而对于c语言中来说,对于一个常量,则不必初始化则可以编译通过。

const int a;

const在c++中的用法:

1.const修饰的变量一定要初始化;
2.在c++中,const修饰的变量不允许修改;
3.无论是对const修饰的内存块是进行间接访问还是直接访问,都不可以修改到const修饰的变量,否则就会报错;
4.在编译阶段,用到const的常量的地方,直接把const修饰的常量替换过去;
5.即使使用一些特殊的手段修改了常量的值,但是在使用的时候,还是使用的是初始化的值;因为在编译的时候,是直接对常量进行替换

const在c语言中的用法:

1.const在C语言中修饰的是一个变量,这个变量不能被改变,其他地方和变量相同。
2.在编译阶段看const修饰的常量是否有左值。
3.在c中,const总是占用内存;
4.和变量的其他属性相同。

总结:

对于const来说,在c语言中默认是外部链接的,而对于c++来说,默认是内部链接,所以对于c++中,常量不被初始化是不能被接受的,所以要想在C++中常量不被初始化也可以通过编译,必须要用extern关键字:

extern int a;

则此代码便可以在c++源代码中编译通过;

const和#define

const的最初发明动机便是取代#define。所以,在c++中,尽量用const而不是#define。
const相比较于#define来说,有以下好处:
1.const常量有数据类型,而#define没有。而且const常量替换是在编译阶段,而**#define替换是预编译阶段**,所以const常量多了安全检查和类型检查,所以在代码规范性上更安全;
2.使用常量可以产生更小的目标文件.o,因为#define知识单纯的文本替换和展开。
3.const在编译过程中可以进行常量折叠。编译的更快一点。

总结:在c++中尽量避免使用#define,而使用const;

tips

1.对于单纯常量,最好用const和enums代替#define;
2.对于形似函数的宏,尽量用inline代替#define;

猜你喜欢

转载自blog.csdn.net/ALITAAAA/article/details/106420998