- const用于定义常量
const 代表改表不可修改,只能一开始赋初值
必须要初始化,除非加extern
const int class_size = 12;
int finalGrade[class_size];
int x;
cin >> x;
const int size = x;
double classAverage[size];
- 修饰指针
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。
const指针代表不能通过该指针去修改内存,不代表内存是const
- const修饰函数参数
void fun(A const &a); //提高效率。用“引用传递”不需要产生临时对象,省了临时对象的构造、复制、析构过程消耗的时间。但光用引用有可能改变a,所以加const
- const修饰函数的返回值
如给“指针传递”的函数返回值加const,则返回值不能被直接修改,且该返回值只能被赋值给加const修饰的同类型指针。 - const修饰类的成员函数(函数定义体)
任何不会修改数据成员的函数都应用const修饰,这样当不小心修改了数据成员或调用了非const成员函数时,编译器都会报错。
const修饰类的成员函数形式为:int GetCount(void) const;
- 修饰类成员变量
用const修饰的类成员变量,只能在类的构造函数初始化列表中赋值,不能在类构造函数体内赋值。
class A
{
public:
A(int x) : a(x) // 正确
{
//a = x; // 错误
}
private:
const int a;
};
- 修饰类成员函数
用const修饰的类成员函数,在该函数体内不能改变该类对象的任何成员变量, 也不能调用类中任何非const成员函数。
一个函数后面有const代表this是const
其构成了overload,所以会执行带有const的函数
#include <iostream>
using namespace std;
class a
{
int i;
public:
a():i(0){}
void f()
{
cout << "f()" << endl;
}
void f() const
{
cout << "f() const" << endl;
}
};
int main()
{
const a b;
b.f();
return 0;
}
- 修饰类对象
用const修饰的类对象,该对象内的任何成员变量都不能被修改。
因此不能调用该对象的任何非const成员函数,因为对非const成员函数的调用会有修改成员变量的企图。
class A
{
public:
void funcA() {}
void funcB() const {}
};
int main
{
const A a;
a.funcB(); // 可以
a.funcA(); // 错误
const A* b = new A();
b->funcB(); // 可以
b->funcA(); // 错误
}
因为ip是可修改的,所以那是错的