在c++中,const可以用在很多地方。我认为最重要的是两个方向
1.变量上
2.函数上
下面分别来说明。
用在变量上时
#include "pch.h"
#include<string>
#include <iostream>
using namespace std;
int main()
{
const int a=1; //最简单的情况 可以叫做常量a,必须在定义的时候赋值
const string b; //这里为什么不需要赋初值呢?因为string是个类,创建对象的时候会调用默认构造函数 但是不可以给b赋值
const int& c = a;//常量引用,不可以通过c来修改a,因为a本来也是const类型的,不写const编译器会报错
int e;
e = 1;
int& f = e; //正常的引用
f = 2; //可以通过f来修改e的内容
int& const g = e; /*这种写法其实没有什么实际东西,int类型前面没有const,所以我们可以通过f来修改e的内容,
而f前const代表f本身的内容不可修改,这句话,大家可能不太理解。不要紧,不需要深入理解,
int& g=e;和上面这句话是一个意思的
*/
g = 2;
const int& h = e;//顶层const不可修改e的内容
//h = 2; //这句是错误的
//把下面这段程序理解清楚,const的用法就清楚了
int m;
const int* i = &m; //不可以通过i指针修改m的内容
// *i=4; 这句话是错误的
int* const j =&m; //不能够修改j指针本身的地址值
*j = 4; //这句话是正确的
//++j; 这句话是错误的
const int* const k = &m; //这句话集合了上面的两种情况,不可通过k修改m,也不可以修改k实际存贮的地址
}
用在函数上时
#ifndef _Consttry
#define _Consttry
#include<iostream>
#include<string>
using namespace std;
class Const_try {
private:
string a;
int b;
public:
Const_try(const string& c,int d): //这里传进来的参数c用了const ,所以我们在Const_try类中不可以修改c字符串的内容
a(c),b(d)
{}
int returnb()const { /*这里的const代表什么意思呢,我们不可在returnb这个函数中修改private成员变量的内容,
仅仅是返回一个值而已,你也可以理解为this这个指针是const类型的*/
return this->b;
}
};
#endif // !_Consttry