const
- 修饰一个变量后,该变量就变成了常变量,拥有常量的性质,不可以被重新赋值。
比如:const int num = 10;
num = 20//就是错误的了。
const char* p:p是一个指针,它指向了一个常量字符。
char const *p:p是一个常量指针,它指向了一个字符。
由两句话的意思我们可以看出,const在不同的位置起到的作用是不一样的,它修饰的对象将变为常量,且不可以被更改。
- const同样可以用作在函数传参时,使参数不可被更改。
我们在进行传参时,有时会使用引用传参,或者地址传参的方式,这些方法有可能都会对参数本身造成改变,但如果我们不想改变参数本身内容时,使用const就可以起到我们想要的作用。
比如:
void fun1(const int& n)
{
n = 5;//const修饰,改值失败。
}
void fun2( int& n)
{
n = 5;
}
int main()
{
int tmp1 = 2;
int tmp2 = 2;
fun1(tmp1);
fun2(tmp2);
return 0;
}
在这里我们得到的结果一定是tmp1在程序执行后依然维持原来的值,而tmp2则由于函数作用变成了5。
- const修饰函数返回值,使返回值不能被更改。但接收返回值的变量同样要加const进行修饰。
- const修饰的变量,只能被该文件,不能被别的文件调用,除非定义时加上extern进行修饰。
static
- 在修饰局部变量的时候,修饰的局部变量只执行一次,且延长了生存时间,直到程序执行结束才释放。
- 在修饰全局变量的时候,该全部变量不能被其他文件所访问,有extern修饰也不可以。
- 在修饰函数时,此函数也不能被其他文件所访问,static修饰的局部变量存放在静态变量区,自动初始化为0。
- 在类中,静态数据成员可以被多个对象所共享,它是所有类的共享成员,改变它的值,所有对象中的值都会改变。
- 静态数据成员是在程序运行开始就分配空间的,即使一个类没有创建对象,仍然会分配空间给静态数据成员。
- 静态数据成员只能在类外进行初始化,且使用类和对象名都可以进行访问。
- 静态函数成员同样是被类所共享的。且没有this指针,而且只能访问静态数据成员。