C++中的const的使用

 

const 意为常数,总的来说就是被const修饰过的数无法进行修改。

好处:

1、保护数据,增强代码的健壮性。 

2、便于进行类型检查。     const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。

3、可以节省空间,避免不必要的内存分配。

4、提高了效率。       编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

用法:

1、const用于将某个变量变为常值,使其在接下来的程序中无法再次被更新,否则编译器将报错。

ps:如果要对该变量进行操作,只能在初始化时对其进行操作。

int f(const int a)//a在该函数中将无法进行修改。
{
	...; 
} 

int main()
{
	const int a;.//a在程序中将不能修改 。 
}
const int *p;//该处p指针的值也无法进行更新。

2、用于在类中声明该函数是是上个函数的重载。

class P
{
	public:
		int a;
		void f();
		void f() const;//此处声明f函数重载 
} 


3、常引用。格式为

     const     类型标识符  &  引用名;

    常引用所引用的对象不会被更新,并且如果被引用量是常量那么只能通过常引用引用。

void f(const int &a,const int &b)//a,b所被引用的值在该函数中无法被更新。 

ps:

const 转换为非 const的方法:

采用const_cast 进行转换。  

用法:const_cast <type_id>  (expression) 
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。

常量指针被转化成非常量指针,并且仍然指向原来的对象;

常量引用被转换成非常量引用,并且仍然指向原来的对象;

常量对象被转换成非常量对象。

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高

猜你喜欢

转载自blog.csdn.net/Bonny722/article/details/62444727