区分const修饰的量是否能改,简单来说,主要看const后跟的那个量,该量是不能修改的。
1、const修饰变量
const修饰变量,可以使变量具有常属性,也就是该变量在以后的使用中其值都不能进行改变。
注意:const修饰的变量要进行初始化。
const a=11;
a=2;//错误,const 后面的a不能修改
const a=11; a=2;//错误,const 后面的a不能修改
2.const和指针
const 修饰指针变量有以下三种情况。
(1):const 修饰指针指向的内容,则内容为不可变量。
(2):const 修饰指针,则指针为不可变量。
(3):const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。
(4)不能把有常属性的赋给无常属性的,如:
3.修饰函数
(1).限定函数的传递值参数:
void function(const int Var); //传递过来的参数在函数内不可以改变.
(2).限定函数返回值型.
const int function(); //此时const无意义
const myclassname function(); //函数返回自定义类型myclassname.
int i=88; const int*p=&i; int*q=&i; p=q;//正确 q=p;//错误
3.const修饰类成员函数
(1)常成员函数声明格式:
类型说明符 函数名(参数表)const;
void print()const; //常成员函数, Const成员函数不能改变对象的成员函数。此时const修饰隐含形参this.
(2)const可以修饰类成员函数,防止类成员函数中除了static成员之外的其他成员被修改。
class A: { public: void fun()const { a=20; //错误,不可以修改非static得值 b=10; } private: int a ; static int b; };
(3)const关键字可以用于对重载函数的区分,如:
void getX(); //参数为:point*this
void getY() const; //const修饰隐含的形参this指针 //参数为:const point*this
void getX(); //参数为:point*this void getY() const; //const修饰隐含的形参this指针 //参数为:const point*this
同名不同参为重载。
4.const修饰类的成员变量
类的成员变量可以分为静态的和非静态的,如果const修饰的是非静态的成员变量,可以在构造函数中对该变量进行初始化;
如果const修饰的静态的成员变量,则需要在类外对该变量进行初始化。
class A { public : A():a(10) {} private: const int a; static const int b; }; const int A ::b=15;
5.const和#define的区别
#define A 10
const int A=10;
上面两条语句的作用是一样的,但是后面一条语句可以节省内存空间,这是为什么呢?
原因在于在程序中多次使用const类型的变量,只会在第一次分配内存,但是如果使用#define定义的宏,则每次都会分配内存,这样看来使用const会节省很多空间。
8、const和extern
file1.cpp中, const int a;
file2.cpp中, extern int a; //错误,无法调用,
说明const修饰大的变量只能在该程序的本文件中使用,不能在该程序的其他文件中使用。
要想const定义的对象变量能被其他文件调用,定义时必须使用extern修饰为
extern const int a;
————————————————
版权声明:本文为CSDN博主「weixin_45413479」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45413479/article/details/100043769