const是constant的缩写,意为不变的,恒定的。在C++中存在const保留关键词,它可以声明一个常量,编译器在编译时直接将其锁死,不可对其的值进行修改,只能读取。下面来详细讲解其用法
最简单的用法
在初始化一个数据,对象时,使用const关键词,将其变为常对象。用const修饰的变量值在程序任意位置不能再被修改,就像一个常数一样使用。不可对其值进行修改,赋值,只能读取
int a = 12;
const int a1 = 114514;
int const a2 = 114514;
a1 = 1919810;//错误,a1已被cosnt修饰,成为常量
a2 = 13;//cosnt在数据类型声明前后均可
a = 11;//普通变量的修饰
const int i;//错误,必须进行初始赋值
string s = "qwqwq";
string const s1 = "qaqaq";
const string s2 = "wqwqwq";
s = "123";//正确
s1 = "qqqqq";//错误
s2 = "swdadw";//错误
const引用
const引用,可以对const对象创建cosnt引用,也可以对普通对象创建const引用,无法对const对象创建普通引用。因为const修饰的变量只能读,因此用一个可以读也可以写的普通引用去和const修饰的可读不可写的变量建立关系显然是不可取的;而对普通对象建立的const引用,只能读取,不能修改,这一特性可以保护原对象,在一些函数里常用。
const int a1 = 114514;
int const a2 = 114514;
const int &b1 = a1;
const int &b = a;
int &b2 = a2;//非法
然后是一些const引用的特性,可以绑定在类型不同但相关(float和int都是数字,但具体什么叫相关正在努力研究中...)的变量上;也可以让const初始化为一个字面值常量。
float d = 3.14;//const引用可以绑定到类型不同,但类型相关的变量上
const int &d1 = d;//正确,允许这样绑定
int &d2 = d;//错误,普通引用无这样的特性
const float &e = 3.1415;//const引用也可以直接对没有初始化的数据进行绑定
float &f = 3.14159//错误, 普通引用无这种特性
引用在内部存放的是一个对象的地址,它是该对象的别名。对于不可寻址的值,如文字常量,以及不同类型的对象,编译器为了实现引用,必须生成一个临时对象,引用实际上指向该对象,但用户无法访问#来源文章#
const成员函数
将关键字const加在形参表之后,可将成员函数声明为常量。
class student
{
private:
int num;
int score;
public:
void display() const;
};
void student::display() const
{
cout<<num<<endl;
}
const成员函数不能改变其所操作的对象的数据成员,只能读,不能修改;
const成员必须同时出现在声明和函数体中,是常成员函数的一部分。
对于两个成员函数,名字和参数均相同,是否为const会被当做重载
const用于共用数据的保护
常数据成员
class student
{
private:
const int degree;
int num;
int score;
public:
void display() const;
};
void student::display() const
{
cout<<num<<endl;
}
在数据成员前加上const将其声明称常数据成员,只能读取,不能修改,需要使用参数列表进行初始化。
常对象
class student
{
private:
const int degree;
int num;
int score;
public:
void display() const;
};
void student::display() const
{
cout<<num<<endl;
}
int main()
{
const student st1;
student const st2;//const放在前放在后均可
}
一个对象被声明为常对象后,仅能调用其中的常成员函数,且无法对内部数据进行修改,需在初始化时带上所有参数。
由于有常函数和常对象的存在,保证了const对象内部数据绝对安全。但有些想要修改的数据则可以用指定可变数据成员的方法
mutable int i;
这样之后就可以用const常成员函数修改。
指向对象的常指针、指向常对象的指针
指向对象的常指针
//指向对象的常指针 time t1(19,12,14),t2; time *const pl = &t1;
指向常对象的指针
const char c[] = "boy"; const chat* p1 = c;
指向对象的常指针(const pointer):指针的值不变,指向不变。
指向常对象的指针:其指向的类对象的值不能通过指针改变,用于函数参数传递,保护对象。
总结