const的定义
Const是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的,即不能够改变。
c++中const的作用
(此图片转自https://blog.csdn.net/Eric_Jo/article/details/4138548)
c++和c中const的区别
在c++中,一个const不必创建内存空间,而在c中,一个const总是需要内存空间。
-
在C语言中,const定义的局部常量是一个伪常量,编译器为它分配内存,通过指针可以访问,从而改变这个常量的值。
-
在c++中。const编译是一个真正的常量,编译器不会为const分配内存,只会临时开辟一快内存空间。
-
那如果在C++中定义const,如何为其创建内存空间。
1、 取一个const地址
2、 把他定义为extern 则会为const创建内存空间。
C++和C的相同点(代码)
当Const定义的是全局变量。
- c语言中,const会被存储到只读数据段。c++中const,当声明extern或者对变量取地址时,编译器会分配存储地址,变量存储在只读数据段。两个都受到了只读数据段的保护,不可修改。
如图所示:
如这段代码,不能够修改constA的值,它的结果是:
C++与C的不同点(代码)
当Const定义为局部变量时。
在c语言中定义是,编译器会为其分配内存,通过指针可以改变这个量。
但是在C++中就不行。
- C++中对于局部的const变量要区别对待:
- 1、对于基础数据类型,也就是const int a=10这种,编译器会把它放到符号表中,不分配内存,当对其取地址时,会分配内存。
c++中const的一些分配内存的情况:
- 1、对于基础数据类型,如果用一个变量初始化const变量。即const int a=b;那么也是会给a分配内存的。
constA分配了内存,所以我们能修改constA的值。
- 2、对于自定数据类型,比如类对象,那么也会分配内存。
const的使用
-
1、用于指针的两种情况:const是一个左结合的类型修饰符.
int const *A; //A可变,*A不可变 int *const A; //A不可变,*A可变
-
2、限定函数的传递值参数:
void function(const int Var); //传递过来的参数在函数内不可以改变.
-
3、限定函数返回值型.
const放在函数前面的意义到底是什么?
在函数前实际上是约束函数的返回的,表明返回的值不能做左值,实际上就是防止返回值直接被赋值。但是一般的变量无法修改函数返回值,其实是为了防止函数返回类型为指针类型时,通过指针对返回值进行修改。非指针的函数返回类型前加const是没有意义的。
const int function(); //此时const无意义
const myclassname function(); //函数返回自定义类型myclassname.
- 4、限定函数类型
void function()const; //常成员函数, 常成员函数是不能改变成员变量值的函数。
class Point
{
public:
int GetX() const;
int GetY() const; //const修饰的其实是this指针
void SetPt (int, int);
void OffsetPt (int, int);
private:
int xVal, yVal;
};
//const成员函数应该在函数原型说明和函数定义中都增加const限定:
//const放在成员函数的后面 表明它不能修改类的数据成员。即限制类的成员函数不能对成员变量进行修改。
int Point::GetY() const
{
return yVal;
}
//而下面的函数改变Point对象:
void Point:: SetPt (int x, int y)
{
xVal=x;
yVal=y;
}
- 5、定义常量
const int a=10;
int const a=10; 它们的含义是一样的。