const是C++中的关键字,又叫常量限定符,作用是告知编译器const修饰的变量是不可修改的。
- #include
- using namespace std;
-
- int main(int argc, char argv[])
- {
- // 在修饰常量时,int const和const int是等价的。
- int const a = 10;
- const int b = 20;
- cout << "a: " << a << "; b: " << b << endl;
- //a = 30; // 不允许修改,执行错误
- //b = 40; //不允许修改,执行错误
- return 0;
- }
结果:
a: 10; b: 20
- #include
- using namespace std;
-
- int main(int argc, char argv[])
- {
- // 在修饰数组时,int const和const int是等价的。
- int const a[5] = {10, 20, 30, 40, 50};
- const int b[5] = {60, 70, 80, 90, 100};
- cout << "a: " << a[2] << "; b: " << b[3] << endl;
- //a[3] = 30; // 不允许修改,执行错误
- //b[4] = 40; //不允许修改,执行错误
- return 0;
- }
结果:
a: 30; b: 90
- #include
- #include
- using namespace std;
-
- int main(int argc, char argv[])
- {
- // 变量num的值可以任意修改
- int num = 1876;
-
- // ptr_1将一直也只能指向变量num,不能指向别的int型变量
- int* const ptr_1 = #
-
- // 不能通过ptr_2修改num的值,ptr_2可以指向别的int型变量
- const int* ptr_2 = #
-
- // ptr_3将一直也只能指向变量num,不能通过ptr_3修改num的值
- const int* const ptr_3 = #
-
- return 0;
- }
总结:
若const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量。
若const位于*的右侧,则const就是修饰指针本身,即指针本身是常量。
const在函数中根据修饰的位置分为三种:函数参数、函数返回值、成员函数。
参数可以是变量、指针、引用等。
- #include
- #include
- using namespace std;
-
- int sum(const int a, const int b)
- {
- // a = 100; // 执行错误,const修饰不能修改
- return a + b;
- }
-
- int main(int argc, char argv[])
- {
- int a = 10;
- int b = 20;
- cout << "sum: " << sum(a, b) << endl;
- return 0;
- }
结果:
sum: 30
返回值可以是指针、引用、或者值传递(值传递没有必要用const修饰)等。
- #include
- #include
- using namespace std;
-
- class student
- {
- public:
-
- private:
- int age = 10;
- };
-
- student std_1;
-
- // 值传递,没有必要用const修饰
- const int sum(int a, int b)
- {
- return a + b;
- }
-
- // 返回值为指针
- const student* get()
- {
- return &std_1;
- }
-
- int main(int argc, char argv[])
- {
- int a = 10;
- int b = 20;
- cout << "sum: " << sum(a, b) << endl;
-
- const student* std_2 = get();
- student std_3;
- //std_2 = std_3; // std_2是一个常量不能改变
- return 0;
- }
结果:
sum: 30
const修饰的成员函数为了保护成员变量,要求const函数不能修改成员变量,否则编译会报错。
函数体内不能修改成员变量的值,增加程序的健壮性或鲁棒性。只有成员函数才可以在后面加const,普通函数后加const无意义。
- #include
- #include
- using namespace std;
-
- class student
- {
- public:
- void set(int age_t) const;
- private:
- int age = 10;
- };
-
- void student::set(int age_t) const
- {
- // 因为age是成员变量,set函数不能修改成员变量的值,所以此处执行失败
- //age = age_t;
- cout << "aa bb cc dd ee ff." << endl;
- }
-
- int main(int argc, char argv[])
- {
- student std_1;
- std_1.set(100);
- return 0;
- }
结果:
aa bb cc dd ee ff.
const函数的规则:
[1]、const对象只能访问const成员函数,非const的对象可以访问任何成员函数,包括const 成员函数。
[2]、如果函数名、参数、返回值都相同的const成员函数和非const成员函数是可以构成重载,那么const对象调用const成员函数,非const对象默认调用非const的成员函数。
[3]、const成员函数可以访问所有成员变量,但是只能访问const的成员函数。
[4]、非const成员函数,可以访问任何成员变量,也可以访问任何成员函数。
[5]、const成员函数不能修改任何的成员变量,除非变量用mutable修饰。