const 在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
指定了一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。
- 定义常量,值初始化以后就不能再改变了
const int a = 7; //在声明常量变量时,必须初始化它们。
const int b = a + 10; // 正确
a = 8; // 错误,不能改变
如果我们试图改变它的值,就会得到编译时错误。
- 修饰指针变量
int a = 8;
int b = 7;
const int *p1 = &a; //const 修饰指针指向的内容,则内容为不可变量。
*p1 = 32; // 错 不可以修改
p1 = &b; //可以
int* const p2 = &a; // const 修饰指针,则指针为不可变量。
*p2 = 9; // 正确
p2 = &b; // 错误
const int * const p3 = &a; //const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。
3.参数传递和函数返回值
- 函数参数
const修饰值传递(内置数据类型),是没有任何必要的。
void Func(const int a){
a++; // error
}
If a function has a non-const parameter, it cannot be passed a const argument while making a call.
void t(int*)
{
// function logic
}
If we pass a const int* argument to the function t, it will give error.
假设有这样两个函数的定义,使用const对指针和引用进行了限制,这个的意思是传进来的参数必须是const常量吗???
void Func(const string* a) ;
void Func(const strgin& a) ;
其实不是的,在函数形参中加上const,意思是不能在函数中去修改它的值,如果有修改的行为,就会引起错误。
- 返回值
修饰值普通类型的值,也是没有必要的,传的是值
const int h()
{
return 1;
}
int main()
{
const int j = h(); //ok
int k = h(); //ok
}
修饰返回的指针或者引用。
const string& a Func();
const string& a Func();
const 修饰自定义类型的作为返回值,此时返回的值不能作为左值使用,既不能被赋值,也不能被修改。
const Tensor Cmf();
4 修饰类成员函数
const 修饰类成员函数,其目的是防止成员函数修改被调用对象的值,如果我们不想修改一个调用对象的值,所有的成员函数都应当声明为 const 成员函数。
注意:const 关键字不能与 static 关键字同时使用,因为 static 关键字修饰静态成员函数,静态成员函数不含有 this 指针,即不能实例化,const 成员函数必须具体到某一实例。
- 修饰类的成员数据
class Test
{
const int i;
public:
Test(int x):i(x) //需要使用参数列表初始化
{
cout << "\ni value set: " << i;
}
};
int main()
{
Test t(10);
Test s(20);
}
- 修饰一个对象
在对象的生存期内,永远不能更改其数据成员。 (不能调用对象的非const成员函数)
const class_name object;
参考链接:
https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html
https://www.studytonight.com/cpp/const-keyword.php
网友评论