c++中const使用的说明

const在C++中有多种用途,刚开始学习很容易产生混淆,在此将const的各种用法做一个小结,帮助大家记忆在什么情况下应该如何使用const。
个人笔记:

(1)定义常量

在C中,习惯使用宏定义#define来定义常量,例如:
#define PI 3.14159;
在C++常使用const修饰符来定义常量,例如:
const float PI=3.14159;
建议:用const取代#define来定义常量 。为什么?
define定义: PI没有类型,不占用存储单元,#define只是在预编译时进行字符置换
const定义: PI是有类型的,它占用存储单元,有地址,可以用指针指向这个值,但不能修改它

使用#define的不安全性。

  #include<iostream>    
   using namespace std; 
 	   int main()
 	   {
  	  	 int a=1;
   	 	 #define  T1  a+a
   		  #define  T2  T1-T1
  	  	 cout <<"T2 is"<<T2<<endl;
  	  	 return 0;
  	   }

在这里插入图片描述
const的作用与#define相似,但它消除了#define的不安全性。
因此建议:用const取代#define定义常量。
说明:
1) 如果用const定义的是一个整型常量,关键字int可以省略。
例如: 下面的两行定义是等价的:
const int bufsize=200;
const bufsize=200;
2)常量一旦被建立,在程序的任何地方都不能再更改。
3) 与#define定义的常量有所不同,const定义的常量可以有自己的数据类型,这样C++的编译程序可以进行更加严格的类型检查,具有良好的编译时的检测性。

(2)限定指针

const可以与指针一起使用,它们的组合情况可归纳为以下三种:
. 指向常量的指针
. 常指针
. 指向常量的常指针
1) 指向常量的指针是指:一个指向常量的指针变量。
例如:const char* pc=“abcd”;
这个语句的含义为:声明一个名pc的指针变量,它指向一个字 符型常量,初始化pc为指向字符串“abcd"。
2) 常指针是指:把指针所指的地址,而不是它指向的对象声明为常量。
例如: char* const pc=“abcd";
这个语句的含义为:声明一个名为pc的指针变量,该指针是指向字符型数据的常指针,用“abcd”的地址初始化该常指针。
3) 指向常量的常指针是指:这个指针变量所指的地址不能改变,它所指向的地址中的数据也不能改变。
例如: const char* const pc=“abcd”;
这个语句的含义是:声明了一个名为pc的指针变量,它是一个指向字符型常量的常指针,用“abcd"的地址初始化该指针。

(3)限定函数参数

按值传递参数时,传递的实参在函数里是不会被修改的,因此使用const限定没有实际意义。为了不引起混淆,在这种情况下通常不使用const。
传递指针或引用参数时,const 限定符保证该地址内容不会被修改。如果意图不是改变实参,那么为了保证参数的安全性,建议以指针或引用方式传递参数时,尽可能使用const 限定参数。
带const指针参数的函数比非const指针参数的函数更具一般性。如果形参是const指针,那么实参可以是const 或非const地址;形参如果是非const 指针,就只能用非const地址调用,传递const地址会引起编译错误。

(4)限定函数返回值

按值返回一个内置类型对象时,与按值传递参数的情况一样,建议不加const。
按值返回用户自定义类型对象时,使用const 限定符意味着函数的返回结果不能作为左值,是不能修改的。
如果返回一个const 指针或引用,表示该返回值地址的内容不允许修改。

(5)限定数据成员

(6)限定类对象

(7)限定成员函数

猜你喜欢

转载自blog.csdn.net/weixin_43175701/article/details/83785423